免费FTP库

101

你能推荐一个适用于C#的免费FTP库(类)吗?

这个库(类)必须编写良好,并且具有良好的性能。

7个回答

86

8
非常感谢!这个方法非常有效!它能够列出带有正确日期时间的目录,并且速度快!示例代码:FtpClient ftp = new FtpClient(txtUsername.Text,txtPassword.Text,txtFTPAddress.Text); `FtpListItem[] items = ftp.GetListing();//在这里,您可以获取包含类型、名称、修改日期和其他属性的列表。 FtpFile file = new FtpFile(ftp,“8051812.xml”);//要获取的文件file.Download(“c:\8051812.xml”);//下载 file.Name =“8051814.xml”;//更改名称以获取新名称 file.Download(“c:\8051814.xml”); ftp.Disconnect();//关闭` - Zviadi
1
请注意,编译的库适用于.NET 3,但将代码转换为2.0非常简单。 - Deanna
3
它也可以作为NuGet包使用:System.Net.FtpClient。 - Jeroen K
2
真的,但是您可以轻松地添加自己的扩展方法,以具有与以前相同的语法。 这是我的:http://pastebin.com/FiKMrH76 - Erwin Mayer
2
虽然FluentFTP确实是一个很好的.NET FTP客户端库,但不幸的是它不支持TLS / SSL会话重用。这在安全性是必需且许多FTP服务器要求重用时成为一种严重限制。请参阅Can connect to FTP using FileZilla or WinSCP, but not with FtpWebRequest or FluentFTP - Martin Prikryl

21
为什么不使用随 .NET 框架提供的库:http://msdn.microsoft.com/en-us/library/ms229718.aspx
编辑:2019 年 4 月由 https://stackoverflow.com/users/1527/ 进行了更新。此回答已不再有效,其他答案已得到微软认可。
这些库是由微软设计的,但微软不再推荐使用它们:

我们不建议您在新开发中使用 FtpWebRequest 类。有关更多信息和 FtpWebRequest 的替代方法,请参见“GitHub 上 WebRequest 不应使用”。(https://learn.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2)

而“WebRequest 不应使用”页面则指向此问题作为库的明确列表!

3
我不是100%确定,但这些类不是在每个请求时都重新连接吗?如果是这样的话,性能会受到影响... - Peter
22
FtpWebRequest 类只适用于可以基于请求/响应模式建模的简单事务性 FTP 操作,如下载或上传单个文件。很难使用它执行创建 FTP 文件夹结构或在同一会话中上传和下载等任务。 - Dai
1
非常糟糕的组件 - 如果提供错误的URL,则无法轻松列出文件或文件夹,它将在没有任何异常的情况下运行,但会返回包含消息的HTML - 我找不到任何文件(因此,您需要解析该HTML)...我认为微软可以花点时间创建正常的库而不是这个... - VikciaR
1
@0fnt:您的评论就像是:您不喜欢这辆车 - 那就自己造一辆。 - VikciaR
6
MS文档 https://learn.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 表示不建议在新项目中使用,并指向 https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md,该链接又指向了这个问题。 - Pete Kirkham
显示剩余5条评论

12

edtFTPnet 是一个用C#编写的免费、快速、开源的.NET FTP库。


1
它是在LGPL许可下发布的。因此,如果您正在开发商业产品/服务,您将打开一个关于您可以做什么和不能做什么,包括什么等问题的潘多拉魔盒。而且,SO和其他网站上的多个答案对此问题有不同的看法... - Oleksii Vynnychenko
1
我是这个软件的开发者之一。 我想说我们从未追究过任何人LGPL违规问题,甚至从未考虑过这种情况。 当这个库在2003年首次发布时,我们选择这个许可证的主要原因是LGPL是众所周知的许多类似许可证中的一个。 现在有更多的选项,我们应该找到另一个更适合我们目标的许可证。 我们唯一想确保的是,没有人使用我们的软件创建与其竞争的商业产品。 有没有人对更少繁琐的许可证有建议? - HansA
2
顺便说一下,如果您的法律团队有任何担忧,您可以花99美元购买更自由的许可证。哦,还有网站现在已经更新了 :). 该产品仍然非常活跃,部分原因是它是另一个非常成功的产品CompleteFTP的一部分。感谢Oleksii指出这个问题。我们会讨论的。 - HansA

7

我喜欢由微软MVP Alex Pilotti编写的Alex FTPS客户端。这是一个可以在控制台应用程序、Windows表单、PowerShell、ASP.NET(任何.NET语言)中使用的C#库。如果您有一个多线程应用程序,您需要配置库以同步运行,但总体来说,这是一个很好的客户端,很可能能满足您的需求。


链接失效了。这个项目搬到别的地方了吗? - Kissaki
看起来这是他们的GitHub,但没有任何ftp存储库。 - Kissaki


1

我刚刚发布了一篇文章,介绍了一个FTP客户端类和一个FTP用户控件。

它们很简单,速度不是很快,但非常易于使用,并且所有源代码都已包含。只需将用户控件拖放到表单上,即可允许用户从您的应用程序中浏览FTP目录。


使用已过时的 FtpWebRequest - Kissaki
1
@Kissaki:这就是在回答超过11年的情况下可能发生的事情。 - Jonathan Wood
真遗憾,这个问题因为“此问题不符合 Stack Overflow 准则”而被关闭。它需要非常迫切地更新,因为这个问题已经变得更加广为人知和紧迫。请参见 https://github.com/dotnet/runtime/issues/27916(截至 2020 年 11 月更新),该链接指向了这篇 2018 年的帖子 https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md,正如上面所提到的,该帖子指向了这个“死”的线程,但对于 .NET Core 团队来说仍然有用,他们留下了一个指针。 - M.Bearden

1

经过大量调查后,我发现以下内容非常方便:https://github.com/flagbug/FlagFtp

例如(尝试使用标准的.net“库”完成此操作将非常麻烦)-> 递归检索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);
        }
    }

flagftp使用Windows ftp客户端调用。这并不是好事或坏事,但这意味着该库容易受到Windows ftp调用可能引发的相同错误的影响。 - John Mott
1
他们没有公开许可证。最后版本为2012年的0.1.3版。这是一个已死、不完整、未授权的项目。 - Kissaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接