我正在使用System.Net命名空间中的FtpWebRequest和FtpWebResponse对象发出LIST命令。我遇到的问题是我连接的FTP服务器没有实现OPTS命令。
有没有办法阻止FtpWebRequest发出OPTS命令?
答案 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
发送的命令:
WriteCallbackDelegate
注入基础FtpWebRequest
CommandStream
。CommandStream
Commands
列表我已written up some draft detail了解如何执行此操作,但请随时在此处发表评论或发送电子邮件给我,如果有人看到此内容并需要更多详细信息。