Tengo un programa que necesita mover un archivo de un directorio a otro en un servidor FTP. Por ejemplo, el archivo está en:¿Cómo puedo usar FTP para mover archivos entre directorios?
ftp://1.1.1.1/MAIN/Dir1
y tengo que mover el archivo a:
ftp://1.1.1.1/MAIN/Dir2
me encontré con un par de artículos que recomiendan el uso del comando Cambiar nombre, por lo que trató lo siguiente:
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();
Pero esto no parece funcionar - me sale el siguiente error:
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
Al principio pensé que esto podría estar relacionado con los permisos, pero por lo que puedo ver, tengo permisos para todo el sitio FTP (está en mi PC local y el uri se resuelve en localhost).
¿Debería ser posible mover archivos entre directorios como este, y si no es así, cómo es posible?
Para hacer frente a algunos de los puntos y/o sugerencias que se han planteado:
- puedo descargar el mismo archivo desde el directorio de origen, por lo que definitivamente existe (lo que estoy haciendo es descargar el archivo en primer lugar, y luego moverlo a otro lugar).
- Puedo acceder al sitio ftp desde un navegador (tanto el directorio de origen como el de destino)
- El servidor ftp se está ejecutando en mi propia instancia de IIS en mi máquina local.
- La ruta y el caso son correctos y no hay caracteres especiales.
Además, he intentado fijar la ruta del directorio a ser:
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
Tanto para la ruta de origen y de destino - pero esto no hace ninguna diferencia tampoco.
Encontré this artículo, que parece decir que la especificación del destino como una ruta relativa ayudaría; no parece posible especificar una ruta absoluta como destino.
reqFTP.RenameTo = “../Dir2/MyFile.txt";
Si conecta ftp://1.1.1.1/MAIN/Dir1/MyFile.txt en un navegador, ¿funciona? –
¿La ruta contiene algún carácter especial que deba escaparse? –
Ver las últimas ediciones, pero las respuestas son: sí, funciona desde un navegador y, no, la ruta no tiene caracteres especiales –