C#FTP挂起在大文件上

C#FTP挂起在大文件上,c#,ftp,C#,Ftp,我看过其他关于这方面的帖子,但我读过的帖子中没有一篇有一个真正有效的答案。因此,这些帖子没有帮助。我已经尝试了我所看到的每一个建议。 简而言之:这个例程非常适合中小型文件。但一旦我达到大约1GB,它就会挂起。非常感谢您的帮助 System.Net.ServicePointManager.Expect100Continue = false; System.Diagnostics.Trace.WriteLine("FTP: Download " + this._URL + fixURL(this._

我看过其他关于这方面的帖子,但我读过的帖子中没有一篇有一个真正有效的答案。因此,这些帖子没有帮助。我已经尝试了我所看到的每一个建议。
简而言之:这个例程非常适合中小型文件。但一旦我达到大约1GB,它就会挂起。非常感谢您的帮助

System.Net.ServicePointManager.Expect100Continue = false;
System.Diagnostics.Trace.WriteLine("FTP: Download " + this._URL + fixURL(this._Folder).Replace("\\", "/") + fixURL(ftpFileName));
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(this._URL + fixURL(this._Folder).Replace("\\", "/") + fixURL(ftpFileName));
ftpRequest.Credentials = new NetworkCredential(this._UserName, this._Password);
ftpRequest.UsePassive = false;
ftpRequest.KeepAlive = true;
ftpRequest.UseBinary = true;
ftpRequest.Timeout = -1;
ftpRequest.ReadWriteTimeout = 1000 * 60 * 60 * 5;
ftpRequest.ServicePoint.ConnectionLimit = 1000;
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
using (FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse())
{
    using (Stream ftpStream = ftpResponse.GetResponseStream())
    {
        ftpStream.ReadTimeout = 1000 * 60 * 60 * 5;
        using (FileStream fileStream = File.Create(outFolder + @"\" + ftpFileName))
        {
            Byte[] buffer = new Byte[8092];
            Int32 bytesRead = ftpStream.Read(buffer, 0, buffer.Length);
            Int64 bytessofar = bytesRead;
            System.Diagnostics.Trace.WriteLine("FTP: Download Read Block " + bytessofar.ToString("0"));
            while (bytesRead > 0)
            {
                fileStream.Write(buffer, 0, bytesRead);
                bytesRead = ftpStream.Read(buffer, 0, buffer.Length);
                bytessofar += bytesRead;
                System.Diagnostics.Trace.WriteLine("FTP: Download Read Block " + bytessofar.ToString("0"));
            }
        }
        ftpRequest.Abort();
    }
}

您确定阻塞的不是您的连接或服务器吗?“挂起”也是什么意思?你试过调试吗?当应用程序显示为手动时,您是否尝试暂停该应用程序并检查它在该点上执行的操作?为什么要调用
Abort
?在连接上,我下载了几十个中小型文件,没有问题。此例程在ftpStream上停止。读取并挂起。我在同一台机器上访问FileZilla,使用相同的凭据,然后很好地下载了1GB文件。我在发布模式和调试模式下运行它(这就是Trace.Writeline的原因)。它在两种模式下都挂起。对.abort的调用是其他人的建议,可能我需要在下载小文件后彻底休息一下。我说的是ftp而不是FileZilla。如果出现问题,FileZilla将尝试重新启动,它可能不会尝试一次性下载整个文件,而是下载块。第三,下载失败的可能性总是很大,文件越大,下载失败的可能性就越大,因为下载时间越长。像FileZilla这样的应用程序是为了处理这样的问题而编写的。除了“它挂起”之外,您还没有提供任何有用的信息。所有人都知道,您使用的移动或ISP连接的下载量超过1GB。随机尝试设置通常弊大于利——例如,为什么要禁用被动设置?改为如中所示启用,并检查发生了什么我禁用被动,因为它是在另一篇文章中建议的。不知道我能说得多清楚“它挂了”。ftpStream.Read永远不会回来,关于它我不能说太多。我用的是世纪链接,不是手机。我的网络中没有任何东西阻止我,这就是为什么我说,当我在同一台机器和同一个文件上使用FileZilla时,它工作得很好。这排除了它可能是某种环境条件的可能性。我确信这是FTP流中的一种奇怪的东西,我只需要弄清楚它是什么。