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 サイト全体へのアクセス許可を持っています (ローカル PC 上にあり、uri は localhost に解決されます)。
このようにディレクトリ間でファイルを移動できるはずですか?そうでない場合、どうすれば可能ですか?
提起されたポイント/提案のいくつかに対処するには:
- ソース ディレクトリから同じファイルをダウンロードできるので、間違いなく存在します (最初にファイルをダウンロードしてから別の場所に移動しています)。
- ブラウザから ftp サイトにアクセスできます (ソース ディレクトリとターゲット ディレクトリの両方)。
- ftp サーバーは、ローカル マシン上の自分の IIS インスタンスで実行されています。
- パスと大文字と小文字が正しく、特殊文字はありません。
さらに、ディレクトリ パスを次のように設定しようとしました。
ftp://1.1.1.1/%2fMAIN/Dir1/MyFile.txt
ソースパスとターゲットパスの両方 - しかし、これも違いはありません。
この記事を見つけました。宛先を相対パスで指定すると役立つと思われますが、絶対パスを宛先として指定することはできないようです。
reqFTP.RenameTo = “../Dir2/MyFile.txt";