我使用System.Net名称空间中的FtpWebRequest和FtpWebResponse对象发出LIST命令。我遇到的问题是我连接的FTP服务器没有实现OPTS命令。
有没有办法阻止FtpWebRequest发出OPTS命令?
发布于 2009-10-11 21:48:08
恐怕你不能这么做。根据Reflector的说法,它似乎是硬编码在内部类方法(FtpControlStream.BuildCommandsList)中的,所以你不能重写它。然而,这应该不是问题,即使OPTS命令失败,请求也应该继续(参见Reflector中的FtpControlStream.PipelineInstruction代码)
发布于 2010-01-05 09:03:46
实际上,这是一个问题,因为文件名可能编码不正确……一些ftp服务器不支持OPTS UTF8,但仍然可以在UTF8中传输文件名。(请注意,尽管支持UTF8文件名,但'OPTs UTF8‘不是FTP国际化标准所必需的。)如果没有得到OPTS UTF8的OK响应,.NET Ftp类将使用默认代码页。不幸的是,MS没有提供一些使用UTF8的方法,因为这使得您无法向其他符合utf8的服务器传输国际文件名,也无法从其他服务器传输国际文件名。
发布于 2012-07-30 21:50:54
这不是最优雅的解决方法,但您可以通过以下方式修改FtpWebRequest发送的命令:
WriteCallbackDelegate放入您注入的elegateCommandStream's Commands list中,并将控制权传递回默认回调委托<WriteCallbackDelegate>G215
我已经written up some draft detail了如何做到这一点,但请随时评论那里/这里或电子邮件给我,如果有人看到这一点,并需要更多细节。
https://stackoverflow.com/questions/1545793
复制相似问题