c#4:检查FTP目录是否存在

时间:2011-01-31 14:15:52

标签: c# ftp

我在C#3.5中使用了一个用于所有FTP传输的类,但是由于我更新到框架4,我遇到了一些问题。

我在Google上搜索但找不到解决方案。

特别是使用检查目录是否存在的方法:

public bool DirectoryExists(string directory)
{
  bool directoryExists = false;
  if (directory.Substring(0, 1) != "/")
    directory = "/" + directory;
  FtpWebRequest request = GetFtpWebRequest(host + directory, WebRequestMethods.Ftp.PrintWorkingDirectory);
  try
  {
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    {
      directoryExists = true;
    }
  }
  catch (WebException)
  {
    directoryExists = false;
  }
  return directoryExists;
}

private FtpWebRequest GetFtpWebRequest(string url, string method)
{
  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
  request.UseBinary = true;
  request.KeepAlive = true;
  request.UsePassive = (mode == Modes.Passive);
  request.Timeout = Timeout.Infinite;
  request.ServicePoint.ConnectionLimit = 6;
  request.ReadWriteTimeout = Timeout.Infinite;
  if (credential == null)
    credential = new NetworkCredential(login, password);
  request.Credentials = credential;
  request.Method = method;
  return request;
}

如果目录不存在,则在GetFtpWebRequest抛出异常之前,DirectoryExists方法总是返回true(即使目录不存在),但仅在框架4上。

有没有人有这个问题?

请不要告诉我使用其他库,因为我的所有程序都依赖于此程序,我不想全部更新......

2 个答案:

答案 0 :(得分:2)

只需改变:

WebRequestMethods.Ftp.PrintWorkingDirectory

到...

WebRequestMethods.Ftp.ListDirectory

并且您的代码在.NET 4.0中可以正常工作。

答案 1 :(得分:1)

问题是在新的实现(4.0)中客户端不发送命令' CWD' 。从这里使用方法SetMethodRequiresCWD() 微软解决方案 https://support.microsoft.com/en-us/kb/2134299