Как проверить FtpWebRequest на наличие ошибок

Если я использую System.Net.FtpWebRequest для загрузки файла на сервер vsftpd, нужно ли мне использовать GetResponse для проверки правильности загрузки файла? Или я получаю исключение для каждой ошибки? Что в System.Net.FtpWebResponse я должен проверить?


person magol    schedule 15.12.2009    source источник


Ответы (1)


Да, вы хотите получить объект FTPWebResponse из объекта запроса... вот так:

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
 request.Method = WebRequestMethods.Ftp.UploadFile;

 FtpWebResponse response = (FtpWebResponse) request.GetResponse();
 request.KeepAlive = false;

 byte[] fileraw = File.ReadAllBytes("CompleteLocalPath");

 try
 {
     Stream reqStream = request.GetRequestStream();

     reqStream.Write(fileraw, 0, fileraw.Length);
     reqStream.Close();
 }  
 catch (Exception e)
 {
     response = (FtpWebResponse) request.GetResponse();
     // Do something with response.StatusCode
     response.Close();
 }

Вы захотите проверить Ftp.WebResponse.StatusCode.

В StatusCode довольно много элементов, которые можно вернуть, поэтому проверка на соответствие может быть сложной.

Вот список кодов/описаний, которые могут быть возвращены:

FtpStatusCode

РЕДАКТИРОВАТЬ: Если что-то пойдет не так с передачей, это должно вызвать исключение, когда вы запускаете запись потока. Что вы можете сделать, так это обернуть вокруг всего этого try-catch, и если что-то пойдет не так, вы сможете получить код состояния и распечатать его на любом носителе журнала, который вы используете, чтобы вы могли увидеть, в чем заключается конкретная проблема. Я изменил приведенный выше код, чтобы отразить все это (используя только один способ передачи, вы можете использовать свой собственный).

person Pete H.    schedule 15.12.2009
comment
Что в FtpWebResponse я должен проверить? Предоставляет различные FTP-серверы разные результаты? Какие результаты тогда может дать vsftpd? - person magol; 15.12.2009
comment
Можно ли проверить, меньше ли FtpStatusCode 300? - person magol; 16.12.2009