C# 下载文件之前,请检查ftp服务器上是否存在该文件
在从ftp服务器下载一个文件之前,我想检查它是否存在,如果不存在的话 st抛出异常。该代码示例在文件不存在时工作。但是,当文件存在时,在执行该行之后;“ftpRequest.Method=WebRequestMethods.Ftp.DownloadFile;”它跳过第二个catch块并打印“错误:在提交请求后无法执行此操作。”我看不到的是什么……感谢您的回答C# 下载文件之前,请检查ftp服务器上是否存在该文件,c#,C#,在从ftp服务器下载一个文件之前,我想检查它是否存在,如果不存在的话 st抛出异常。该代码示例在文件不存在时工作。但是,当文件存在时,在执行该行之后;“ftpRequest.Method=WebRequestMethods.Ftp.DownloadFile;”它跳过第二个catch块并打印“错误:在提交请求后无法执行此操作。”我看不到的是什么……感谢您的回答 public void fileDownload(string fileName) { strea
public void fileDownload(string fileName)
{
stream = new FileStream(filePath + fileName, FileMode.Create);
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
ftpRequest.Credentials = new NetworkCredential(userName, password);
ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
response = (FtpWebResponse)ftpRequest.GetResponse();
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpRequest.UseBinary = true;
response = (FtpWebResponse)ftpRequest.GetResponse();
ftpStream = response.GetResponseStream();
cl = response.ContentLength;
bufferSize = 2048;
buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
stream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
stream.Close();
response.Close();
Console.WriteLine("File : " + fileName + " is downloaded from ftp server");
}
catch (WebException ex)
{
FtpWebResponse res = (FtpWebResponse)ex.Response;
if (res.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
stream.Close();
File.Delete(filePath + fileName);
Console.WriteLine("File : " + fileName + " does not exists on ftp server");
System.Diagnostics.Debug.WriteLine("Error: " + fileName + " is not available on fpt server");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
}
}
我的理解是,您必须为每个请求创建一个新的
FtpWebRequest
。因此,在再次设置方法之前,您必须创建一个新方法并再次设置凭据。因此,您必须重复以下两行:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
ftpRequest.Credentials = new NetworkCredential(userName, password);
连接到FTP服务器时,可以将Uri指定为“FTP//FTP.domain.com/somedirectory”,但这会转换为:ftp://ftp.domain.com/homedirectoryforftp/somedirectory". 要定义完整的根目录,请使用“ftp://ftp.domain.com//somedirectory“这将转换为机器上的//somedirectory。是的,你说得对。我通过编写fileExist()方法来处理它,以避免重复相同的行。感谢answerI,它成功了。我遇到了同样的错误:“请求提交后无法执行此操作。”我试图下载一个文件,然后重新上传另一个文件,重复使用相同的请求对象。将它们拆分为单独的请求对象就可以实现这一点。谢谢