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