防止Windows资源管理器干扰目录操作

时间:2010-04-27 01:21:06

标签: c# .net windows system.io.directory

有时,运行此代码后没有留下“foo”目录:

string folder = Path.Combine(Path.GetTempPath(), "foo");
if (!Directory.Exists(folder))
    Directory.CreateDirectory(folder);
Process.Start(@"c:\windows\explorer.exe", folder);
Thread.Sleep(TimeSpan.FromSeconds(5));
Directory.Delete(folder, false);
Directory.CreateDirectory(folder);

似乎Windows资源管理器保留对该文件夹的引用,因此最后一个CreateDirectory无关,但随后删除了原始文件夹。我该如何修复代码?

编辑: 对不起,我的问题不明确。我的目标是创建一个空的“foo”目录。如果目录已存在,我将其删除并重新创建。问题是,如果Windows资源管理器正在查看该目录,则CreateDirectory调用有时会无提示失败。没有例外;目录刚刚没有创建。

上面的代码在我的电脑中重现了这个问题。只有最后两行属于我的实际应用程序。之前的行已设置。运行代码后,“foo”是否始终存在?在我的电脑中有一半时间不是这种情况。

目前,我正在手动删除foo的每个文件和子目录。

1 个答案:

答案 0 :(得分:1)

由于您没有提供详细信息(例如异常,错误),我将假设这是问题所在。

我认为问题是当您运行删除文件夹的命令时,资源管理器仍在运行。这可能是一个锁定问题。

Directory.Delete(folder, false);

要么是这样,要么有其他应用程序访问该文件夹或其子文件夹或文件,如果有的话。

如果可能的话,我建议不要通过资源管理器或任何其他应用程序触摸该文件夹,并在删除文件夹之前等待资源管理器先退出。

        Process p = Process.Start(@"c:\windows\explorer.exe", folder);
        Thread.Sleep(TimeSpan.FromSeconds(5));
        p.WaitForExit(); //<-------
        Directory.Delete(folder, false);

此外,请不要忽略抛出的异常和错误,并将其粘贴到此处(如果有)。

希望它有所帮助。