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ミリ秒しか待機しません。無限ループに入らずにそれを行う確実な方法はありません。