Пример #1
0
        private FtpResponse ListFolder(FtpRequest request, FtpData ftpData)
        {
            var path = request.Arguments.Length > 0 ?
                       Path.GetFullPath(ftpData.CurrentDirectory + request.Arguments.Aggregate((prev, next) => prev + " " + next)) :
                       ftpData.CurrentDirectory;
            var directories = Directory.EnumerateDirectories(path);
            var files       = Directory.EnumerateFiles(path);

            foreach (var dir in directories)
            {
                var editDate = Directory.GetLastWriteTime(dir);

                var date = editDate < DateTime.Now.Subtract(TimeSpan.FromDays(180)) ?
                           editDate.ToString("MMM dd  yyyy", CultureInfo.InvariantCulture) :
                           editDate.ToString("MMM dd HH:mm", CultureInfo.InvariantCulture);

                var data  = "drwxr-xr-x    2 2003     2003         4096 " + date + ' ' + Path.GetFileName(dir) + "\r\n";
                var bytes = Encoding.UTF8.GetBytes(data);
                ftpData.SendData(bytes, bytes.Length);
            }

            foreach (var file in files)
            {
                var f = new FileInfo(file);

                var date = f.LastWriteTime < DateTime.Now.Subtract(TimeSpan.FromDays(180)) ?
                           f.LastWriteTime.ToString("MMM dd  yyyy", CultureInfo.InvariantCulture) :
                           f.LastWriteTime.ToString("MMM dd HH:mm", CultureInfo.InvariantCulture);

                var line = "-rw-r--r--    2 2003     2003     ";

                var length = f.Length.ToString(CultureInfo.InvariantCulture);

                if (length.Length < 8)
                {
                    for (var i = 0; i < 8 - length.Length; i++)
                    {
                        line += ' ';
                    }
                }

                line += length + ' ' + date + ' ' + f.Name + "\r\n";
                var bytes = Encoding.UTF8.GetBytes(line);
                ftpData.SendData(bytes, bytes.Length);
            }

            return(new FtpResponse {
                StatusCode = FtpResponseCodes.ClosingDataConnection, Message = "Transfer complete"
            });
        }
Пример #2
0
        private FtpResponse RetrieveFile(FtpRequest request, FtpData ftpData)
        {
            var path = request.Arguments.Length > 0 ?
                       Path.GetFullPath(ftpData.CurrentDirectory + request.Arguments.Aggregate((prev, next) => prev + " " + next)) :
                       null;

            if (path != null)
            {
                using var fs = File.OpenRead(path);
                var buffer = new byte[256];
                int bytesRead;
                while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ftpData.SendData(buffer, bytesRead);
                }
            }

            return(new FtpResponse {
                StatusCode = FtpResponseCodes.ClosingDataConnection, Message = "Transfer complete"
            });
        }