У меня есть программа, которая должна переместить файл из одного каталога в другой на FTP-сервере. Например, файл находится в папке
ftp://1.1.1.1/MAIN/Dir1
и мне нужно переместить файл:
ftp://1.1.1.1/MAIN/Dir2
Я нашел пару статей, рекомендующих использовать команду Rename, поэтому я попробовал следующее:
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-сайт (он находится на моем локальном ПК, а uri разрешен на localhost).
Можно ли перемещать файлы между такими каталогами, а если нет, то как это возможно?
Чтобы обратиться к некоторым вопросам/предложениям, которые были подняты:
- Я могу загрузить тот же файл из исходного каталога, поэтому он определенно существует (то, что я делаю, сначала загружает файл, а затем перемещает его в другое место).
- Я могу получить доступ к ftp-сайту из браузера (как исходного, так и целевого каталога)
- ftp-сервер работает под моим собственным экземпляром IIS на моей локальной машине.
- Путь и регистр верны и особых символов нет.
Кроме того, я попытался установить путь к каталогу:
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
Как для исходного, так и для целевого пути - но это тоже не имеет значения.
Я нашел эту статью, которая, по-видимому, подсказывает, что указание назначения как относительного пути поможет - оно не представляется возможным для указания абсолютного пути в качестве адресата.
reqFTP.RenameTo = "../Dir2/MyFile.txt";