-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 回答