繁体   English   中英

使用ftp协议下载大文件

[英]Download large files using ftp protocol

我知道这可能不是第一次。 但是我找不到解决问题的办法。

  private void bgftpdownload_DoWork(object sender, DoWorkEventArgs e)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpurl + "/" + clientlabel.Text + "/data.7z");
        request.Credentials = new NetworkCredential(ftpuser, ftppass);
        request.Method = WebRequestMethods.Ftp.GetFileSize;
        request.Proxy = null;

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        long fileSize = response.ContentLength;

        request = (FtpWebRequest)WebRequest.Create(ftpurl + "/" + clientlabel.Text + "/data.7z");
        request.Credentials = new NetworkCredential(ftpuser, ftppass);
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        using (FtpWebResponse responseFileDownload = (FtpWebResponse)request.GetResponse())
        using (Stream responseStream = responseFileDownload.GetResponseStream())
        using (FileStream writeStream = new FileStream(LocationFile, FileMode.Create))
        {

            int Length = 2048;
            Byte[] buffer = new Byte[Length];
            int bytesRead = responseStream.Read(buffer, 0, Length);
            int bytes = 0;

            while (bytesRead > 0)
            {
                writeStream.Write(buffer, 0, bytesRead);
                bytesRead = responseStream.Read(buffer, 0, Length);
                bytes += bytesRead;
                int totalSize = (int)(fileSize / 1048576);
                bgftpdownload.ReportProgress((bytes / 1048576) * 100 / totalSize, totalSize);
            }
        }
    }
    private void bgftpdownload_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
            progresslabel.Text = e.ProgressPercentage * (int)e.UserState / 100 + " Mb / " + e.UserState + " Mb";
            progressBar1.Value = e.ProgressPercentage;
    }

我有这段代码,它的工作很棒..直到它在ftp服务器上命中了2 gb文件

我可以在其他论坛上阅读,(int)的值限制为= 2147483591,因此该问题已解决,原因是我的字节变得高于限制(2147483591)

System.Windows.Forms.dll中发生类型为'System.ArgumentOutOfRangeException'的异常,但未在用户代码中处理

附加信息:Værdien'-45'er ugyldig表示'Value'。 '价值'skalværemellem'最小'或'最大'。

我该怎么做才能解决此问题?

您的进度条正在触发失败,尝试将其设置为-45,这是无效的。

int totalSize = (int)(fileSize / 1048576);
bgftpdownload.ReportProgress((bytes / 1048576) * 100 / totalSize, totalSize);

您在totalSize上出现溢出,这导致负%,这将导致您看到的错误。

...至少我认为那是错的。

long bytes = 0;

bgftpdownload.ReportProgress((int)(bytes / 1048576) * 100 / totalSize, totalSize);
是解决方案,我将(int)放在ReportProgress的错误位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM