如何在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
}
}
通常,在这样的代码中使用Exceptions功能是个坏主意,但是在这种情况下,我认为实用主义是一个胜利。与以这种方式使用异常相比,目录上的呼叫列表可能会导致FAR效率低下。
如果不是,请注意这不是一个好习惯!
编辑:“它对我有用!”
这似乎适用于大多数ftp服务器,但不是全部。某些服务器要求发送“ TYPE I”,然后SIZE命令才能起作用。有人认为应该按以下方式解决问题:
request.UseBinary = true;
不幸的是,这是一个设计限制(很大的错误!),除非FtpWebRequest正在下载或上传文件,否则它将不会发送“ TYPE
I”。请参阅此处的讨论和Microsoft的响应。
我建议改用以下WebRequestMethod,这对我测试过的所有服务器都有效,即使那些不会返回文件大小的服务器也是如此。
WebRequestMethods.Ftp.GetDateTimestamp
以上是 如何在FtpWebRequest之前检查FTP上是否存在文件 的全部内容, 来源链接: utcz.com/qa/416316.html