如下代码我原来测试过。是好使的。但是现在总是报错:
远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。
在网上找了一堆问题好多都是重复的。没什么用处。
我把源代码贴上来大家帮忙看看。
public void DownloadFile(string ftpUrl, string ftpUserID, string ftpPassword, string fileDirectory, string ftpFilePath)
{
string filePath = ftpFilePath.Substring(ftpUrl.Length).Replace("/", "\\");
int fileLenght = filePath.Substring(filePath.LastIndexOf("\\") + 1).Length;
string localFilePath = fileDirectory + "\\" + filePath.Substring(0, filePath.Length - fileLenght);
string fileName = ftpFilePath.Substring(ftpFilePath.LastIndexOf('/') + 1);
if (fileDirectory == string.Empty)//默认文件夹
{
fileDirectory = "C:\ftpDownLoad";
if (!Directory.Exists(@fileDirectory))
{
Directory.CreateDirectory(@fileDirectory);
}
}
if (!Directory.Exists(localFilePath))//创建文件夹
{
Directory.CreateDirectory(localFilePath);
}
using (FileStream fs = new FileStream(localFilePath+fileName, FileMode.OpenOrCreate))
{
FtpWebRequest fwRequest = (FtpWebRequest)WebRequest.Create(ftpFilePath);
fwRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
fwRequest.KeepAlive = false;
fwRequest.Method = WebRequestMethods.Ftp.DownloadFile;
fwRequest.ContentOffset = fs.Length;
using (FtpWebResponse response = (FtpWebResponse)fwRequest.GetResponse())
{
fs.Position = fs.Length;
byte[] buffer = new byte[4096];
int count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
while (count > 0)
{
fs.Write(buffer, 0, count);
count = response.GetResponseStream().Read(buffer, 0, buffer.Length);
}
response.GetResponseStream().Close();
}
}
}
1、你确认你的FTP服务器与帐户密码没问题?
2、response.GetResponseStream()调用一次就好,没必要多次这样调用。
我估计错误就在response.GetResponseStream(),当服务器忙的时候,这段代码的问题很大。
3、response.GetResponseStream().Close()简直就是画蛇添足!代码可以修改为:
using (FtpWebResponse response = (FtpWebResponse)fwRequest.GetResponse()) { Stream stream = response.GetResponseStream(); fs.Position = fs.Length; byte[] buffer = new byte[4096]; int count = 0; while((count = stream.Read(buffer, 0, buffer.Length)) > 0) { fs.Write(buffer, 0, count); } stream.Close();//其实没必要关闭,网络流在response被dispose的时候会处理。 }
你的代码我参考下。还是报相同的错误!我怀疑是不是ftp文件路径有问题。我本地上传在根目录下的文件,可以下载。。。但是如果多级目录在创建完后打不开文件夹,而且也删除不了(报是否有权限删除)。我确定在浏览器中访问ftp的时候该路径是没问题能够正常访问的。同样的路径我copy到程序上就有问题了。
@Bj-Soctt-胖仔: 这个倒是没注意过。你或者,使用FTP协议来实现这个下载看?
建议检查一下FTP服务器上文件系统的权限设置