C# 当计算报告backgroundworker progressBar时,我得到异常不能除以零怎么了?
方法如下: 获取文件的长度时,已给出0C# 当计算报告backgroundworker progressBar时,我得到异常不能除以零怎么了?,c#,.net,winforms,C#,.net,Winforms,方法如下: 获取文件的长度时,已给出0 public void DownloadFtpContent(object sender ,string file, string filesdirectories,string fn) { try { BackgroundWorker bw = sender as BackgroundWorker;
public void DownloadFtpContent(object sender ,string file, string filesdirectories,string fn)
{
try
{
BackgroundWorker bw = sender as BackgroundWorker;
string filenameonly = Path.GetFileName(file);
string ftpdirectories = Path.Combine(ftpcontentdir, filesdirectories);
string fileurl = "ftp://" + file;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(fileurl);
reqFTP.Credentials = new NetworkCredential(UserName, Password);
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
reqFTP.KeepAlive = true;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.Proxy = null;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
if (!Directory.Exists(ftpdirectories))
{
Directory.CreateDirectory(ftpdirectories);
}
FileStream writeStream = new FileStream(ftpdirectories + "\\" + filenameonly, FileMode.Create);
string fnn = ftpdirectories + "\\" + filenameonly;
int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = responseStream.Read(buffer, 0, Length);
long FileSize = new FileInfo(fnn).Length;
string FileSizeDescription = GetFileSize(FileSize);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = responseStream.Read(buffer, 0, Length);
string SummaryText = String.Format("Transferred {0} / {1}", GetFileSize(bytesRead), FileSizeDescription);
bw.ReportProgress((int)(((decimal)bytesRead / (decimal)FileSize) * 100), SummaryText);
}
writeStream.Close();
response.Close();
}
catch (WebException wEx)
{
//MessageBox.Show(wEx.Message, "Download Error");
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "Download Error");
}
}
}
此行上的结果已为0:
long FileSize = new FileInfo(fnn).Length;
在fnn中,我有:c:\myftpdownloads\root\Images\CB 967x330.jpg
为什么长度的结果是0
并且文件大小不是0kb
编辑
以下是我从backgroundworker dowork事件调用下载方法的方式:
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < numberOfFiles.Count; i++)
{
int fn = numberOfFiles[i].IndexOf(txtHost.Text, 0);
string fn1 = numberOfFiles[i].Substring(txtHost.Text.Length + 1, numberOfFiles[i].Length - (txtHost.Text.Length + 1));
string dirs = Path.GetDirectoryName(fn1);
string filename = Path.GetFileName(fn1);
ftpProgress1.DownloadFtpContent(sender,numberOfFiles[i], dirs, filename);
}
}
为什么长度的结果为0并不重要。在没有任何保护的情况下,将该数字除以0是很重要的
在划分之前只需检查:
if( FileSize != 0 ){...}
使用调试器,卢克!我现在使用断点看到这个位置的文件还没有下载到我的硬盘上,硬盘上的文件大小是0字节。我看不到它自己的形象。但在没有计算和报告进展的情况下,这些文件下载得很好。那么,我应该如何以及在哪里进行计算呢?也许在这段时间内的某个地方?或者在下载文件后,如果已下载,是否确定?在上传我没有问题,因为文件是从硬盘,所以大小是已知的,很容易获得。但是下载我想如果还没有下载的话,我不知道filze的大小。我在问题中添加了backgroundworker的dowwork事件,在我如何调用下载方法的表单1中。格兰特的问题是对的,我正在发送一个文件,我想因为该文件还没有下载,它将继续移动到下一个文件。因此,即使使用此保护检查,也始终是0。
if( FileSize != 0 ){...}