При вычислении для отчета фонового прогресса я получаю исключение не могу разделить на ноль, что не так?

Это метод: получение длины файлов уже дает 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?

И файл не размером 0 КБ.

РЕДАКТИРОВАТЬ

Вот как я вызываю метод загрузки из события dowork backgroundworker:

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);
            }
        }

1 ответ

In fnn i have: c:\myftpdownloads\root\Images\CB 967x330.jpg Why the result of the Length is 0 ?

На самом деле не имеет значения, почему результат длины равен 0. Это имеет значение, что вы делите это число на 0 без какой-либо защиты.

Просто проверьте, прежде чем делить:

if( FileSize != 0 ){...}
Другие вопросы по тегам