c# - 来自 FTPWebRequest.GetResponse() 方法的状态码

标签 c# .net ftpwebresponse

这有点棘手。

我正在异步上传文件到 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 block 。如果这是正确的方法,请告诉我。

最佳答案

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

关于c# - 来自 FTPWebRequest.GetResponse() 方法的状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713785/

相关文章:

c# - 将 JSON 序列化为动态时属性名称中的非法字符

c# - 组合根与服务定位器

c# - 解析是获取成员类型的唯一方法吗?

c# - 在项目之间共享变量

c# - 为什么 FtpWebRequest 会为此现有目录返回一个空流?

c# - 读取带有国际字符的 FTP 文件

c# - 在 C# 中评估 sql 语句的最佳方法是什么?

c# - 为什么单击按钮后我的更新按钮文本不显示?

c# - 如何从 Xml 文档中去除命名空间