有时,运行此代码后没有留下“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的每个文件和子目录。
答案 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);
此外,请不要忽略抛出的异常和错误,并将其粘贴到此处(如果有)。
希望它有所帮助。