【发布时间】:2011-06-19 09:25:25
【问题描述】:
我有一个程序需要在 FTP 服务器上将文件从一个目录移动到另一个目录。例如文件在:
ftp://1.1.1.1/MAIN/Dir1
我需要将文件移动到:
ftp://1.1.1.1/MAIN/Dir2
我找到了几篇推荐使用重命名命令的文章,所以我尝试了以下方法:
Uri serverFile = new Uri(“ftp://1.1.1.1/MAIN/Dir1/MyFile.txt");
FtpWebRequest reqFTP= (FtpWebRequest)FtpWebRequest.Create(serverFile);
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPass);
reqFTP.RenameTo = “ftp://1.1.1.1/MAIN/Dir2/MyFile.txt";
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
但这似乎不起作用 - 我收到以下错误:
远程服务器返回错误:(550) 文件不可用(例如,找不到文件,无法访问)。
起初我认为这可能与权限有关,但据我所知,我拥有整个 FTP 站点的权限(它在我的本地 PC 上,并且 uri 被解析为 localhost)。
应该可以像这样在目录之间移动文件吗,如果没有,怎么可能?
解决一些已提出的观点/建议:
- 我可以从源目录下载相同的文件,所以它肯定存在(我正在做的是先下载文件,然后将它移动到其他地方)。
- 我可以从浏览器(源目录和目标目录)访问 ftp 站点
- ftp 服务器在我本地机器上我自己的 IIS 实例下运行。
- 路径和大小写正确,没有特殊字符。
另外,我尝试将目录路径设置为:
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
对于源路径和目标路径 - 但这也没有区别。
我找到了this 文章,它似乎说将目标指定为相对路径会有所帮助 - 似乎无法将绝对路径指定为目标。
reqFTP.RenameTo = “../Dir2/MyFile.txt";
【问题讨论】:
-
如果您将1.1.1.1/MAIN/Dir1/MyFile.txt 插入浏览器,它可以工作吗?
-
路径中是否包含需要转义的特殊字符?
-
查看最新的编辑,但答案是:是的 - 它确实可以在浏览器中工作,不 - 路径没有特殊字符
-
@PaulMichaels 这是如何解决的?只是通过使用 .Rename 方法? :D
-
@Roxy'Pro - 恐怕我的记性不太好。鉴于我将 vlad 的答案标记为正确,我想这至少让我找到了解决方案。
标签: c# .net-3.5 ftp ftpwebrequest