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" }); }
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" }); }