Как проверить, существует ли файл на FTP перед FtpWebRequest

66
задан Martin Prikryl 27 April 2018 в 06:54
поделиться

1 ответ

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

Как правило это - плохая идея использовать Исключения для функциональности в Вашем коде как это, однако в этом экземпляре, я полагаю, что это - победа для прагматизма. Список вызовов на каталоге имеет потенциал, чтобы быть FAR, более неэффективным, чем использование исключений таким образом.

, Если Вы не, просто знать, что это не хорошая практика!

РЕДАКТИРОВАНИЕ: "Это работает на меня!"

Это, кажется, работает над большинством FTP-серверов, но не всеми. Некоторые серверы требуют передающего "ТИПА I", прежде чем команда SIZE будет работать. Можно было бы думать, что проблема должна быть решена следующим образом:

request.UseBinary = true;

, К сожалению, это ограничением дизайна (большая ошибка!), что, если FtpWebRequest или не загружает или загружает файл, это НЕ отправит "ТИП I". Посмотрите обсуждение и ответ Microsoft здесь .

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

WebRequestMethods.Ftp.GetDateTimestamp
113
ответ дан user42467 24 November 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: