gpt4 book ai didi

c# - 通过 WebClient/FTP 下载大文件时出现问题

转载 作者:行者123 更新时间:2023-11-30 18:40:22 25 4
gpt4 key购买 nike

我目前正在构建一个应用程序,其中包括从 FTP 服务器下载大文件。对于小文件(< 50 MB)一切正常,但我下载的文件要大得多,主要超过 2 GB。

我一直在尝试使用一个使用 DownloadfileAsync() 的网络客户端和一个列表系统,因为我正在一个接一个地下载这些文件,因为它们的大小。

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 全速进行,而使用 edtFTPnet 库时我的下载速度只有全速的 1/3)。

有什么想法吗?我不得不承认,我的想法已经用完了。

最佳答案

public string GetRequest(Uri uri, int timeoutMilliseconds)
{
var request = System.Net.WebRequest.Create(uri);
request.Timeout = timeoutMilliseconds;
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new System.IO.StreamReader(stream))
{
return reader.ReadToEnd();
}
}

关于c# - 通过 WebClient/FTP 下载大文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com