FtpWebRequest / FtpWebResponse上的OPTS命令

时间:2009-10-09 20:03:01

标签: .net ftp ftpwebrequest system.net

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

  1. 使用异步方法(开始/结束)
  2. 将您自己的WriteCallbackDelegate注入基础FtpWebRequest CommandStream
  3. 修改注入的elegate中的CommandStream Commands列表
  4. 将控制权传递回默认回调委托
  5. 我已written up some draft detail了解如何执行此操作,但请随时在此处发表评论或发送电子邮件给我,如果有人看到此内容并需要更多详细信息。