Ciò è leggermente complicato.Codice di stato dal metodo FTPWebRequest.GetResponse()
Sto caricando file su FTP in modo asincrono. Dopo aver caricato ciascun file, controllo lo stato dell'operazione di caricamento per quel file. Questo può essere fatto con la proprietà StatusCode dell'oggetto FtpWebResponse per quella richiesta. Lo snippet di codice è come indicato di seguito.
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());
Ci sono circa 37 valori di StatusCode come da msdn. Non sono a conoscenza di quale di questi valori del codice di stato assicurerà che il file è stato caricato correttamente. Alcuni di loro che ho usato nel mio codice per verificare il successo sono:
wrRet.StatusCode == FtpStatusCode.CommandOK
wrRet.StatusCode == FtpStatusCode.ClosingData
wrRet.StatusCode == FtpStatusCode.ClosingControl
wrRet.StatusCode == FtpStatusCode.ConnectionClosed
wrRet.StatusCode == FtpStatusCode.FileActionOK
wrRet.StatusCode == FtpStatusCode.FileStatus
Ma io sono a conoscenza di tutto il resto. Devo essere sicuro di questi codici perché, in base al fallimento o al successo dell'operazione di caricamento, devo eseguire altre operazioni dipendenti. Una condizione errata può influire sul codice rimanente. Un altro pensiero che mi passava per la testa era semplicemente mettere il codice sopra in un try..catch e non dipendere da questi codici di stato. Con questo non dipenderei dai codici di stato e supponendo che ogni errore verrà sempre indirizzato al blocco catch. Gentilmente fammi sapere se questo è il modo giusto.
Ho avuto i miei problemi con i server FTP. Vorrei andare con una soluzione pragmatica e semplicemente verificare se il file appena caricato sul server può essere trovato di nuovo dopo il caricamento. So che non risponde alla domanda, ma sono giunto alla conclusione che non potevo fidarmi della risposta dei server FTP – MacGyver