4

我正在使用 System.Net 命名空间中的 FtpWebRequest 和 FtpWebResponse 对象来发出 LIST 命令。我遇到的问题是我连接的 FTP 服务器没有实现 OPTS 命令。

有没有办法阻止 FtpWebRequest 发出 OPTS 命令?

4

3 回答 3

5

恐怕你不能那样做......根据Reflector,它似乎被硬编码在内部类方法(FtpControlStream.BuildCommandsList)中,所以你不能覆盖它。但是这应该不是问题,即使 OPTS 命令失败,请求也应该继续(参见FtpControlStream.PipelineInstructionReflector 中的代码)

于 2009-10-11T21:48:08.050 回答
3

实际上,这是一个问题,因为文件名可能没有正确编码......一些ftp服务器不支持OPTS UTF8,但仍然以UTF8传输文件名。(请注意,FTP 国际化标准不需要“OPTs UTF8”,尽管支持 UTF8 文件名。)如果 .NET Ftp 类没有得到对 OPTS UTF8 的 OK 响应,它们将使用默认代码页...不幸的是,MS 无论如何都没有提供某种使用 UTF8 的方法,因为这使您无法在其他符合 UTF8 标准的服务器之间传输国际文件名。

于 2010-01-05T01:03:45.617 回答
3

这不是最优雅的解决方法,但您可以通过以下方式修改FtpWebRequest发送的命令:

  1. 使用异步方法(开始/结束)
  2. 将你自己的WriteCallbackDelegate注入底层FtpWebRequest CommandStream
  3. 修改注入的 elegate 中CommandStream的列表Commands
  4. 将控制权交还给默认回调委托

我已经写了一些关于如何做到这一点的草稿细节,但如果有人看到这个并需要更多细节,请随时在此处/此处发表评论或给我发电子邮件。

于 2012-07-30T13:50:53.897 回答