Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当计算报告backgroundworker progressBar时,我得到异常不能除以零怎么了?_C#_.net_Winforms - Fatal编程技术网

C# 当计算报告backgroundworker progressBar时,我得到异常不能除以零怎么了?

C# 当计算报告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;

方法如下: 获取文件的长度时,已给出0

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 ){...}