C#のFtpWebRequestでディレクトリ削除ができない
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2010-03-01
.NET C# の FtpWebRequest を利用して FTP の操作をあれこれしていましたが、特定の条件下において、ディレクトリの削除ができなかったので調査してみました。空ディレクトリを作成した直後にはディレクトリ削除は可能で、ディレクトリに対するファイルの入出力が複数のリモートホストからあった場合に削除ができなくなります。
実際に、WebException で catch されるエラーを確認してみると以下の通りです。
リモート サーバーがエラーを返しました: (451) プロセス中のローカル エラーです
複数のリモートホストの FTP サーバに対するプロセスを確認しながら、接続関連の KeepAlive やタイムアウトなどを調整してみましたが解決に至らず、最終的に FTP クライアントソフトを使って試してみることに。すると、ディレクトリ削除までのフローは、中身のファイルを 1 つずつ削除(DELETE)してから、最後にディレクトリを削除(REMOVE)していることが判明。
今までプログラム内で FTP の操作をする機会がなかったとはいえ、各プロトコルの勉強不足が明確となりました。
結果的に、対象のディレクトリのファイル一覧を取得して、それを 1 つずつ削除した後にディレクトリを削除することで解決しました。もっと他に方法があるのだろうか。
関連記事
上記の記事に関連する記事(最新の10件)です。


