Answers:
您可以考虑FluentFTP,以前称为System.Net.FtpClient。
它以MIT许可证发布,可在NuGet(FluentFTP)上获得。
您为什么不使用.NET框架随附的库:http : //msdn.microsoft.com/zh-cn/library/ms229718.aspx?
编辑:2019年4月,通过https://stackoverflow.com/users/1527/ 此答案不再有效。其他答案也得到Microsoft的认可。
它们是由Microsoft设计的,不再建议使用它们:
我们不建议您将FtpWebRequest类用于新开发。有关FtpWebRequest的更多信息和替代方法,请参阅不应在GitHub上使用WebRequest。(https://docs.microsoft.com/zh-cn/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2)
“不应该使用WebRequest”页面又将这个问题指向了库的权威列表!
FtpWebRequest
班只有真正适用于简单,可在请求/响应模式来模拟交易FTP操作,如上传或下载单个文件。使用它来执行诸如创建FTP文件夹结构或在同一会话中上载和下载之类的任务非常困难。
edtFTPnet是使用C#编写的用于.NET的免费,快速,开源FTP库。
我喜欢由Microsoft MVP名称Alex Pilotti编写的Alex FTPS客户端。这是一个C#库,您可以在控制台应用程序,Windows窗体,PowerShell,ASP.NET(以任何.NET语言)中使用。如果您有多线程应用程序,则必须将库配置为同步运行,但是总体而言,一个好的客户端很可能会为您提供所需的东西。
在对同一问题进行大量调查后,我发现此方法非常方便:https : //github.com/flagbug/FlagFtp
例如(尝试使用标准的.net“ library”进行操作-这将是一个真正的痛苦)->递归地删除FTP服务器上的所有文件:
public IEnumerable<FtpFileInfo> GetFiles(string server, string user, string password)
{
var credentials = new NetworkCredential(user, password);
var baseUri = new Uri("ftp://" + server + "/");
var files = new List<FtpFileInfo>();
AddFilesFromSubdirectory(files, baseUri, credentials);
return files;
}
private void AddFilesFromSubdirectory(List<FtpFileInfo> files, Uri uri, NetworkCredential credentials)
{
var client = new FtpClient(credentials);
var lookedUpFiles = client.GetFiles(uri);
files.AddRange(lookedUpFiles);
foreach (var subDirectory in client.GetDirectories(uri))
{
AddFilesFromSubdirectory(files, subDirectory.Uri, credentials);
}
}
FtpListItem[] items = ftp.GetListing();//here you can get list with type, name, modified date and other properties. FtpFile file = new FtpFile(ftp, "8051812.xml");//file to get file.Download("c:\\8051812.xml");//download file.Name = "8051814.xml";//change name to get new file.Download("c:\\8051814.xml"); ftp.Disconnect();//close