Como posso usar o FTP para mover arquivos entre diretórios?
Eu tenho um programa que precisa mover um arquivo de um diretório para outro em um servidor FTP. Por exemplo, o arquivo está em:
ftp://1.1.1.1/MAIN/Dir1
e preciso mover o arquivo para:
ftp://1.1.1.1/MAIN/Dir2
Encontrei alguns artigos recomendando o uso do comando Renomear e tentei o seguinte:
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();
Mas isso não parece funcionar - eu recebo o seguinte erro:
O servidor remoto retornou um erro: (550) Arquivo indisponível (por exemplo, arquivo não encontrado, sem acesso).
No começo, pensei que isso poderia estar relacionado a permissões, mas, tanto quanto posso ver, tenho permissões para todo o site FTP (ele está no meu PC local e a uri é resolvida no localhost).
Deveria ser possível mover arquivos entre diretórios como esse e, se não, como é possível?
Para abordar alguns dos pontos / sugestões levantados:
Eu posso baixar o mesmo arquivo do diretório de origem, então ele definitivamente existe (o que estou fazendo é baixar o arquivo primeiro e depois movê-lo para outro lugar).Posso acessar o site ftp a partir de um navegador (o diretório de origem e o destino)O servidor ftp está sendo executado sob minha própria instância do IIS na minha máquina local.O caminho e o caso estão corretos e não há caracteres especiais.Além disso, tentei definir o caminho do diretório para:
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
Tanto para o caminho de origem quanto de destino - mas isso também não faz diferença.
eu encontreiesta artigo, que parece dizer que especificar o destino como um caminho relativo ajudaria - não parece possível especificar um caminho absoluto como destino.
reqFTP.RenameTo = “../Dir2/MyFile.txt";