Команда FTP ListDirectory возвращает код состояния 125 - PullRequest
0 голосов
/ 26 августа 2011

У меня есть немного кода, который должен проверить, существует ли каталог на удаленном сервере. Он выполняет команду ListDirectory на пути и ожидает ответ, если он существует, и исключение, если оно не существует.

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

Возможно, я совершенно не понимаю, как работает FTP. Я создаю новый запрос каждый раз, поэтому не понимаю, как соединение уже может быть открыто.

О, и код работает с корневыми каталогами, такими как ftp://myIP/Folder1, но не работает с ftp://myIP/Folder1/Folder2. Кстати, я использую FTP-сервер IIS.

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;
    }
}

Как я могу надежно проверить, существует ли каталог? Все примеры кода, которые я нашел, используют эту технику.

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Я обошел эту проблему, используя команду WebRequestMethods.Ftp.MakeDirectory всякий раз, когда я хочу проверить, существует ли каталог.Если он не существует, он создается, если он существует, я ловлю исключение и продолжаю.

1 голос
/ 26 августа 2011

Попробуйте изменить запрос. Метод на

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