2009-12-15 6 views
6

Se utilizzo System.Net.FtpWebRequest per caricare un file su un server vsftpd, devo utilizzare GetResponse per verificare se il file è stato caricato correttamente? O ottengo un'eccezione per ogni errore? Cosa devo controllare in System.Net.FtpWebResponse?Come verificare FtpWebRequest per errori

risposta

6

Sì, si vuole afferrare l'oggetto FtpWebResponse dall'oggetto richiesta ... in questo modo:

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(); 
} 

Si vuole controllare Ftp.WebResponse.StatusCode.

Ci sono un bel numero di membri in StatusCode che possono essere restituiti, quindi controllarli potrebbe essere complicato.

Ecco un elenco di codici/descrizioni che potrebbero essere restituito:

FtpStatusCode

EDIT: Se qualcosa va storto con un trasferimento che dovrebbe generare un'eccezione quando si accende uno scrittore flusso. Quello che puoi fare è racchiudere un try-catch intorno a tutto e, se qualcosa va storto, sarai in grado di ottenere il codice di stato e stamparlo su qualsiasi supporto di log che stai usando in modo da poter vedere quale sia il problema specifico. Ho modificato il codice sopra per riflettere tutto questo (usando solo un modo di trasferire, puoi usare il tuo).

+0

Cosa devo controllare in FtpWebResponse? Fornisce vari server FTP risultati diversi? Quali risultati può quindi dare vsftpd? – magol

+0

Va bene controllare se FtpStatusCode è inferiore a 300? – magol