2.フォルダを作成
として、一括でフォルダをクリアしたいときってあるよね。
以下のコードを実行したところ、フォルダが作成されない現象に陥った。
if(Directory.Exists(path))
{
Directory.Delete(path, true);
}
Directory.CreateDirectory(path);
//ここでフォルダが存在しない
VSをデバッグで1行ずつ進めると、きっちり削除されて作成される。
以下のように変更してみた。
if(Directory.Exists(path))
{
Directory.Delete(path, true);
}
Int32 n = 0;
while(Directory.Exists(path))
{
n++;
}
Console.WriteLine(n);
Directory.CreateDirectory(path);
//こうすると確実に作成される。
//nは2とか1とかになる。
普通に考えるとDelete()が実行された時点でpathのフォルダは存在しないはず
なので、n==0になると思ったが、n==2となり、2ループ分path存在したことを示している。
この現象は別のPCでは発生しない場合もある。
調べてみたところ、MSDNに書いてあった。
MSDN Directory.Delete メソッド (String, Boolean)
In some cases, if you have the specified directory open in File Explorer, the Delete method may not be able to delete it.
ある場合において、あなたが指定したディレクトリをエクスプローラーで開いていると、Deleteメソッドは、削除することができない場合があります。
ガ━━(;゚Д゚)━━ン!!
たしかに、エクスプローラーで該当フォルダを開きながら 実行していた。
エクスプローラーを閉じて、下のプログラムを実行するとnの結果は0となった。
ていうか”ある場合”って何よ。
そこをハッキリしなさいよ!
0 件のコメント:
コメントを投稿