FtpWebRequest无法处理以dash或dot开头的文件名

时间:2014-12-17 14:37:17

标签: c# ftp

我正在使用带有后端filezilla服务器的c#.net 4创建一个基于ftp的实用程序。它工作正常,直到我的深度搜索遇到以( - )破折号或(。)点开头的文件夹。我研究了一下网,发现你不能在ftp中以破折号或点开头的文件名我理解的原因。我尝试按照建议更改"编码uri。"。用"%2E"和" - "使用"%2D"并且 - 与./-没有任何改进(在逐步调试中我看到它成功更改但filezilla服务器记录了550错误),HttpUtilities.UriEncoding给了我相同的结果。很奇怪的行为,虽然看起来ftp LISTS问的父目录。因此,例如当我尝试列出目录/ games / -randomdir时,我再次得到/游戏列表,导致深度搜索/ games / -randomdir / -randomdir的新错误uri!请亲自查看服务器的界面答案:

(127.0.0.1)> CWD /
(127.0.0.1)> 250 CWD successful. "/" is current directory.
(127.0.0.1)> CWD a00000001/game
(127.0.0.1)> 250 CWD successful. "/a00000001/game" is current directory.
(127.0.0.1)> PASV
(127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,194,205)
(127.0.0.1)> LIST -eclipse
(127.0.0.1)> 150 Opening data channel for directory listing of "/a00000001/game"
(127.0.0.1)> 226 Successfully transferred "/a00000001/game"

它成功地传递了游戏的内容,而不是LIST要求的-eclipse。 这是因为LIST -eclipse对于模拟服务器是完全有效的(尽管不存在)命令。所以它再次上传"游戏"使用额外命令" eclipse"。但是,我怎么能逃脱呢?

1 个答案:

答案 0 :(得分:0)

发现这个!这很hacky但很有效。在您的URI上,您需要添加最后一个斜杠“/”,以便FTP在列出之前更改文件夹!

Uri u = new Uri("ftp://" + ip.ToString() + (folder) + "/", UriKind.Absolute);
相关问题