2014-12-07 130 views
-1

我需要获取文件大小,以便我以后可以计算并报告进度条下载大小到目前为止已下载多少以及还有多少下载。为什么我在从我的ftp服务器获取文件大小时遇到​​异常?

在Form1我有一个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); 
      } 
     } 

则在该方法DownloadFtpContent我所做的:

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.GetFileSize; 
       FtpWebResponse resp = (FtpWebResponse)reqFTP.GetResponse(); 
       Int64 FileContLen = resp.ContentLength; 

我在fileurl中看到了目录和文件名,例如:

ftp://ftp.newsxpressmedia.com/Images/CB 967x330.jpg

但使用就行了断点:

FtpWebResponse resp = (FtpWebResponse)reqFTP.GetResponse(); 

我得到异常:

引发WebException:

远程服务器返回错误:(550)文件不可用(例如,文件未找到,无法访问

回答

0

首先,您必须检查文件是否存在或不在Ftp服务器上。如果文件存在,则检查文件访问权限。如果您没有File的访问权限,则无法获取文件大小。

相关问题