Код состояния из метода 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 и не зависеть от этих кодов состояния. При этом я бы не зависел от кодов состояния и предполагал, что любой сбой всегда будет направлен на блок захвата. Пожалуйста, дайте мне знать, если это правильный путь.
1 ответ
FtpStatusCode.ConnectionClosed
является 426
который Connection closed; transfer aborted
так что я бы подумал, что это будет провал на самом деле. Что-нибудь в 2XX
Диапазон, как правило, должен быть успешным. Для клиентов FTP, которые я создал, я помню, что получал только успешную загрузку 226
- FtpStatusCode.ClosingData