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

但我不知道其余的。我需要确定这些代码,因为根据上传操作的失败或成功,我还有其他相关操作要执行。错误的条件会影响剩余的代码。我想到的另一个想法是将上面的代码简单地放入 try..catch 中,而不依赖于这些状态代码。有了这个,我不会依赖状态代码并假设任何失败都将始终指向 catch 块。请让我知道这是否是正确的方法。

4

1 回答 1

6

FtpStatusCode.ConnectionClosed就是426这样,Connection closed; transfer aborted所以我认为这实际上是一个失败。范围内的任何事情2XX通常都应该是成功的。对于我构建的 FTP 客户端,我只记得收到成功上传的客户端是226-FtpStatusCode.ClosingData

于 2011-01-17T14:27:11.107 回答