我有一些代码可以检查远程服务器上是否存在目录。它在路径上执行ListDirectory
命令并期望响应(如果存在)和异常(如果不存在)。
问题是该命令返回代码125 DataAlreadyOpen
,因此我的代码将其解释为成功,何时应该失败。
我可能完全误解了FTP的工作原理。我每次都在创建一个新请求,所以我不明白连接是如何打开的。
哦,代码适用于ftp://myIP/Folder1
之类的根目录,但不适用于ftp://myIP/Folder1/Folder2
。顺便说一句,我正在使用IIS FTP服务器。
public static bool DirectoryExists(string path)
{
try
{
var request = (FtpWebRequest)WebRequest.Create(path);
request.Credentials = new NetworkCredential("foo", "bar");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.KeepAlive = false;
using (var response = (FtpWebResponse)request.GetResponse())
return true;
}
catch (Exception ex)
{
return false;
}
}
如何可靠地检查目录是否存在?我发现的所有代码示例都使用了这种技术。
答案 0 :(得分:1)
尝试更改请求。方法
request.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
答案 1 :(得分:1)
每当我想检查目录是否存在时,我就使用WebRequestMethods.Ftp.MakeDirectory
命令解决了这个问题。如果它不存在,则创建它,如果它存在,我捕获异常并继续。