我需要使用FtpWebRequest
将文件放入FTP目录.在上传之前,我首先想知道这个文件是否存在.
我应该使用什么方法或属性来判断此文件是否存在?
我需要使用FtpWebRequest
将文件放入FTP目录.在上传之前,我首先想知道这个文件是否存在.
我应该使用什么方法或属性来判断此文件是否存在?
var request = (FtpWebRequest)WebRequest.Create
("ftp://ftp.domain.com/doesntexist.txt");
request.Credentials = new NetworkCredential("user", "pass");
request.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode ==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
//Does not exist
}
}
一般来说,在代码中使用异常作为功能是不好的,但是在这种情况下,我相信这是实用主义的胜利.在目录上调用列表可能比以这种方式使用异常效率低得多.
如果你没有,请注意这不是一个好的做法!
编辑:"这对我很管用!"
这似乎适用于大多数ftp服务器,但并非所有服务器.有些服务器需要先发送"TYPE I",然后SIZE命令才能工作.人们会认为这个问题应该通过以下方式解决:
request.UseBinary = true;
不幸的是,这是一个设计限制(大错误!)除非FtpWebRequest正在下载或上传文件,否则它不会发送"type I".请参阅讨论和Microsoft Response here.
我推荐使用下面的WebRequestMethod,它适用于我测试的所有服务器,即使是那些不会返回文件大小的服务器.
WebRequestMethods.Ftp.GetDateTimestamp