我需要获取文件大小,以便稍后我可以计算并向progressBar报告下载大小到目前为止已经下载了多少以及还有多少下载。
在form1中我有一个后台工作者,这就是我用下载方法将文件发送到课程的方式:
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 :(得分:0)
首先,您必须检查Ftp服务器上的文件是否存在。如果文件存在,则检查文件访问权限。如果你没有文件的访问权限,那么你就无法获得文件大小。