2

有时,运行此代码后不会留下任何“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 的每个文件和子目录。

4

1 回答 1

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);

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

希望能帮助到你。

于 2010-04-27T06:12:38.490 回答