-3
DirectoryInfo di = new DirectoryInfo(lPath); 
DirectoryInfo dest = new DirectoryInfo(lPath9);
if (!dest.Exists) dest.Create(di.GetAccessControl());
string mapDirName = di.FullName;
di.Delete(true);
Thread.Sleep(20);  // let the process wait a bit       
dest.MoveTo(mapDirName);           
Thread.Sleep(20);  // let the process wait a bit

上記のコードはほとんどの場合機能します。ただし、destの名前がdiに変更された後、一部のサブディレクトリが欠落している場合があります。

削除が完了する前に名前の変更が開始されたためだと思います。名前を変更する前に、whileループを追加してdiの存在を確認できます。そのような、

int i=0;
While (di.Exists && i < 10) {
     Thread.Sleep(10000);
     i++;
}

それでも、10000*10ミリ秒しか待機しません。無限ループに入らずにそれを行う確実な方法はありません。

4

2 に答える 2

1

先に進む前にすべてが削除されていることを確認する必要があるという同様の状況がありました。これは私がそれを回避することができた方法です。これまでのところ機能しているようです

var dir = new DirectoryInfo(location);
while (dir.Exists)
{
    dir.Delete(true);
    dir = new DirectoryInfo(location);
}
于 2015-06-02T11:11:28.553 に答える
0

destディレクトリを移動する前に任意の時間待つ代わりに、diディレクトリ内のファイルをループしてみませんか?

foreach (FileInfo file in di.GetFiles())
{
    File.Delete( file );
}

dest.MoveTo( mapDirName );
于 2012-06-21T23:26:21.163 に答える