Подтвердить что ты не робот

Код состояния из метода FTPWebRequest.GetResponse()

Это немного сложно.

Я загружаю файлы на FTP асинхронно. После загрузки каждого файла я проверяю статус операции загрузки для этого файла. Это можно сделать с помощью свойства StatusCode объекта FtpWebResponse для этого запроса. Фрагмент кода приведен ниже.

FileStream fs = File.Open(fileName, FileMode.Open);

while ((iWork = fs.Read(buf, 0, buf.Length)) > 0)
    requestStream.Write(buf, 0, iWork);

requestStream.Close();

FtpWebResponse wrRet = ((FtpWebResponse)state.Request.GetResponse());

Существует около 37 значений StatusCode по msdn. Я не знаю, какой из этих значений кода состояния гарантирует, что файл будет загружен успешно. Некоторые из них, которые я использовал в моем коде для проверки на успех:

wrRet.StatusCode == FtpStatusCode.CommandOK 
wrRet.StatusCode == FtpStatusCode.ClosingData
wrRet.StatusCode == FtpStatusCode.ClosingControl
wrRet.StatusCode == FtpStatusCode.ConnectionClosed
wrRet.StatusCode == FtpStatusCode.FileActionOK
wrRet.StatusCode == FtpStatusCode.FileStatus

Но я не знаю об остальном. Я должен быть уверен в этих кодах, потому что на основании отказа или успеха операции загрузки у меня есть другие зависимые операции, которые будут выполняться. Неправильное условие может повлиять на оставшийся код. Еще одна мысль, которая пришла мне в голову, заключалась в том, чтобы просто поставить вышеуказанный код в try..catch и не зависеть от этих кодов состояния. При этом я не буду зависеть от кодов состояния и полагаю, что любой отказ всегда будет направлен на блок catch. Пожалуйста, дайте мне знать, правильно ли это.

4b9b3361

Ответ 1

FtpStatusCode.ConnectionClosed 426, который равен Connection closed; transfer aborted, поэтому я думаю, что на самом деле это был бы сбой. Все, что находится в диапазоне 2XX, должно быть успешным. Для FTP-клиентов, которые я создал, который я помню только для получения успешной загрузки, 226 - FtpStatusCode.ClosingData