我目前正在构建一个应用程序,其中包括从FTP服务器下载大文件。一切工作正常的小文件(< 50 MB),但我下载的文件是更大的方式,主要超过2 GB。通过WebClient/FTP下载大文件问题
我一直在使用一个使用DownloadfileAsync()和一个列表系统的Webclient,因为我一个接一个地下载这些文件,因为它们的大小。
DownloadClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgress);
DownloadClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
private void FileDownload()
{
DownloadClient.DownloadFileAsync(new Uri(@"ftp://" + RemoteAddress + FilesToDownload[0]), LocalDirectory + FilesToDownload[0]));
}
private void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
// Handle progress
}
private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
FilesToDownload.RemoveAt(0);
FileDownload();
}
它工作绝对没这样的小文件,它们都下载一个接一个,进度报告和每个文件后DownloadCompleted
火灾。我遇到的大文件的这个问题是,它会首先下载没有任何问题的下载,但之后不会做任何事情。由于某些原因,DownloadCompleted
事件不会触发。它看起来像WebClient
不知道该文件已完成下载,这是一个问题,因为我正在使用此事件启动FilesToDownload列表中的下一个下载。
我也试过同步使用WebClient.DownloadFile
和for
循环来遍历我的FilesToDownload
列表。它会正确下载第一个文件,并在第二次下载应该开始时出现异常:“底层连接已关闭:接收时出现意外错误”。
最后,我试图通过使用edtFTPnet通过FTP来通过这个,但我面临下载速度问题(即我的下载全速与WebClient
,我只获得全速的1/3与edtFTPnet库)。
有什么想法?我不得不承认,我在这里没有想法。
尝试创建一个文件流或一个MemoryStream通过获取字节和当你说“大”时做什么,你参照GIGS或MB的大的定义是什么 – MethodMan
我的大文件超过2演出。 – Xeaz
记得操作系统处理2 gig的文件大小,但4 gig限制是如果您使用.NET 4.0 Microsoft更改了.NET 4.0中的文件大小限制,所以您将不得不更改您的int大小为多头或Int64类型可以粘贴你正在使用的确切例子..数据的演出总是需要更长的时间。记住交换文件和tmp文件,它不只是一个直接的副本,你必须有目标媒体上的可用存储空间 – MethodMan