C # FTP висит на больших файлах - PullRequest
0 голосов
/ 24 мая 2018

Я видел другие посты на эту тему, но ни одна из прочитанных мной постов не имеет ответа, который действительно работает.Так что эти посты не помогают.Я испробовал все предложения, которые видел.
Короче говоря: эта процедура отлично подходит для небольших и средних файлов.Но как только у меня встает примерно 1 ГБ, зависает.Любая помощь с благодарностью.

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...