我有一个程序需要将文件从FTP服务器上的一个目录移动到另一个目录。例如,该文件是:如何使用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();
但是这似乎并没有工作 - 我得到以下错误:
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
起初我以为这可能与权限有关,但据我所见,我有权访问整个FTP站点(它位于本地PC上,uri已解析为本地主机)。
是否应该可以在这样的目录之间移动文件,如果没有,它怎么可能?
解决一些已经提出的问题/建议:
- 我可以从源目录下载同一个文件,所以它肯定存在(我在做什么,首先下载该文件,然后将它移到其他地方)。
- 我可以从浏览器(包括源和目标目录)访问ftp站点
- ftp服务器在我本地机器上的我自己的IIS实例下运行。
- 路径和大小写是正确的,没有特殊字符。
此外,我已经尝试设置目录路径是:
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
两个源和目标路径 - 但是这并没有区别两种。
我发现this文章,似乎说,指定目的地作为相对路径会有所帮助 - 它似乎不可能指定绝对路径作为目的地。
reqFTP.RenameTo = “../Dir2/MyFile.txt";
如果您将ftp://1.1.1.1/MAIN/Dir1/MyFile.txt插入到浏览器中,它是否正常工作? – 2011-02-01 16:12:19
该路径是否包含需要转义的特殊字符? – 2011-02-01 16:18:11
查看最新编辑内容,但答案是:是 - 它可以在浏览器中正常工作,否 - 路径中没有特殊字符 – 2011-02-02 07:45:15