これは少しトリッキーです。
ファイルを非同期で FTP にアップロードしています。各ファイルをアップロードした後、そのファイルのアップロード操作のステータスを確認しています。これは、そのリクエストの FtpWebResponse オブジェクトの StatusCode プロパティで実行できます。コード スニペットは以下のとおりです。
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());
msdnごとに約 37 個の StatusCode 値があります。これらのステータス コード値のどれがファイルのアップロードの成功を保証するかはわかりません。成功を確認するためにコードで使用したもののいくつかは次のとおりです。
wrRet.StatusCode == FtpStatusCode.CommandOK
wrRet.StatusCode == FtpStatusCode.ClosingData
wrRet.StatusCode == FtpStatusCode.ClosingControl
wrRet.StatusCode == FtpStatusCode.ConnectionClosed
wrRet.StatusCode == FtpStatusCode.FileActionOK
wrRet.StatusCode == FtpStatusCode.FileStatus
しかし、私は残りを知りません。アップロード操作の失敗または成功に基づいて、他の依存操作を実行する必要があるため、これらのコードについて確認する必要があります。不適切な条件は、残りのコードに影響を与える可能性があります。私の頭をよぎったもう 1 つの考えは、上記のコードを単に try..catch に入れ、これらのステータス コードに依存しないことでした。これにより、ステータス コードに依存せず、失敗は常に catch ブロックに送られると仮定します。これが正しい方法かどうか教えてください。