using System.IO;
Directory.Delete("someFolder",true);
Directory.Create("someFolder");
删除目录或删除目录后是否会执行第三行?我是否必须将第一个命令放入“任务”并等待它完成?
答案 0 :(得分:14)
这是一个较旧的问题,但值得注意 - Directory.Delete
最终调用RemoveDirectory
Windows函数,其中标记目录为待删除,但文件系统赢了't 实际上将其删除,直到所有文件句柄都关闭(see docs)。因此,完全可以从Directory.Delete
返回并找到目录仍然存在。
答案 1 :(得分:0)
在运行一些使用文件系统的集成测试时,我也间歇性地遇到了这个问题。
我想要的“完整”操作是获得一个空文件夹,我的进程可以在其中执行其操作。由于以前的测试运行,该文件夹可能已经存在(带有内容),或者如果(a)是新克隆的仓库或(b)我正在添加新的测试用例,则该文件夹可能不存在。
有了Doug's illuminating answer,我意识到Directory.Delete
是在其上进行此操作的真正烂木板。
所以我现在使用这个:
public static DirectoryInfo EmptyDirectory(string directoryPath)
{
var directory = Directory.CreateDirectory(directoryPath);
foreach (var file in directory.EnumerateFiles())
{
file.Delete();
}
foreach (var subdirectory in directory.EnumerateDirectories())
{
subdirectory.Delete(true);
}
return directory;
}
我还在Directory.Delete
文档页面上提出了一条建议,以添加关于该方法的潜在异步特性的某种注释(我想至少是在Windows上)。就泄漏抽象而言,这是一个很大的泄漏。