質問: ファイル操作のテストを行うプログラムを書いています。作業用のディレクトリが既に存在する場合は削除してから作り直そうと思い、次のように書きました。 ``` if (Directory.Exists("foo")) Directory.Delete("foo", true); Directory.CreateDirectory("foo"); ``` ところがディレクトリ foo が既に存在している状態でこれを実行すると、ディレクトリが削除されるだけで再作成が行われません。この時も例外は出ていないようです。 同じようなコードがファイルに対しては問題なく動くのですが・・・。 ``` if(File.Exists("bar")) File.Delete("bar"); File.WriteAllText("bar", ""); ``` ディレクトリの再作成を行うにはどうすればよいでしょうか? 上記のような挙動になる理由も教えていただけると助かります。
回答: `Directory.Delete`.aspx)のリファレンスに触れられていますが、対象のディレクトリを「エクスプローラーで開いている」と削除がすぐに行われない場合があります。 > > 場合によっては、指定したディレクトリを Windows エクスプローラーで開いていると、Delete メソッドで削除できないことがあります。 > > > 内部的に使用している`RemoveDirectory`関数によるとこれはエクスプローラーに限った問題ではないようです。 > > The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed. > > > ですので`while`などを使用して実際に削除されるまで待機するのが良いかと思います。