19

これは少しトリッキーです。

ファイルを非同期で 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 ブロックに送られると仮定します。これが正しい方法かどうか教えてください。

4

1 に答える 1

6

FtpStatusCode.ConnectionClosedですので、実際426Connection closed; transfer abortedは失敗だと思います。通常、2XX範囲内のすべてが成功するはずです。私が構築したFTPクライアントの場合、アップロードが成功したときに受け取ったことを覚えているのは226-FtpStatusCode.ClosingData

于 2011-01-17T14:27:11.107 に答える