c # 4: проверьте, существует ли каталог FTP - PullRequest
3 голосов
/ 31 января 2011

Я использовал класс для всех моих FTP-передач, которые отлично работают в C # 3.5, но, поскольку я обновился до framework 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;
}

Метод DirectoryExists всегда возвращает true (даже каталог не существует), но только в платформе 4, до того как GetFtpWebRequest генерирует исключение, если каталог не существует.

У кого-нибудь была такая проблема?

Пожалуйста, не говорите мне использовать другую библиотеку, потому что все мои программы зависят от этой, и я не хочу обновлять все ...

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Просто измените:

WebRequestMethods.Ftp.PrintWorkingDirectory

на ...

WebRequestMethods.Ftp.ListDirectory

и ваш код будет работать нормальнов .NET 4.0.

1 голос
/ 29 декабря 2016

Проблема в том, что в новой реализации (4.0) клиент не отправляет команду «CWD». Используйте метод SetMethodRequiresCWD () отсюда Microsoft РЕЗОЛЮЦИЯ https://support.microsoft.com/en-us/kb/2134299

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...