我知道这可能不是第一次,这是被问到的。但是我找不到解决问题的办法。
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'的异常,但未在用户代码中处理
附加信息:值“ -45”对于“值”无效。“值”必须介于“最小值”和“最大值”之间。
我该怎么做才能解决此问题?
long bytes = 0;
和
bgftpdownload.ReportProgress((int)(bytes / 1048576) * 100 / totalSize, totalSize);
是解决办法,我置于(INT)在ReportProgress错了地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句