0

我正在尝试从使用被动模式的 FTP 站点下载文件。我已经尝试过 FtpWebRequest 方法和 WebClient.DownloadFile 和 DownloadFileAsync 方法。

最近,我的代码如下所示:

using (var client = new WebClient())
{
    client.Proxy = new WebProxy();
    client.Credentials = credentials;
    client.DownloadFileCompleted += client_DownloadFileCompleted;
    client.DownloadFileAsync(new Uri(remotePath), localPath);
}

并包含在方法 DownloadFile 中。在异步处理程序中,我得到下一项并(递归地)再次调用 DownloadFile 方法,依此类推,直到我到达最后一项。

几乎每一次,我使用的每一种方法,我都会通过 6 个文件和第 7 个错误。它只有一次通过列表中的所有文件,我无法再次复制它。文件数约为 100 个,文件大小约为 30 - 120k 个。奇怪的是,我经常会看到本地文件夹中的文件计数挂在第 7 项上,但是如果我让工作进程在后台运行,然后几分钟后回来并关闭 IIS express 或 VS Web 服务器,文件将显示。但是,它太不可预测了,不能按原样在生产中使用。

我还尝试了 CodePlex 上的 FTP LIB 库并遇到了同样的问题。

他们那边似乎有什么东西正在关闭我的连接。

4

1 回答 1

0

我有一个类似的问题。就我而言,我需要从 Linux 服务器上的许多文件夹中下载许多小文件。系统管理员建议我在每批之间延迟 3 秒。它大大减少了错误的数量。

于 2013-03-04T14:39:38.370 回答