2015年9月2日水曜日

System.IO.Directory.Deleteの不思議現象

1.フォルダを削除
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 件のコメント:

コメントを投稿