C# 目录。使用递归随机删除失败,显示“删除”;“目录不为空”;

C# 目录。使用递归随机删除失败,显示“删除”;“目录不为空”;,c#,exception,C#,Exception,我有一个暂存目录,如果在脚本中使用它,我想清理它。代码很简单: if (Directory.Exists(_stagingDir) && Directory.EnumerateFileSystemEntries(_stagingDir).Any()) { Directory.Delete(_stagingDir, true); } 有时,由于IO异常“目录不为空”而失败。如果我递归地删除其中的所有项(这是该函数中true应该做的),这难道不重要吗?如果我将脚本备

我有一个暂存目录,如果在脚本中使用它,我想清理它。代码很简单:

if (Directory.Exists(_stagingDir) &&
    Directory.EnumerateFileSystemEntries(_stagingDir).Any())
{
    Directory.Delete(_stagingDir, true);
}
有时,由于IO异常“目录不为空”而失败。如果我递归地删除其中的所有项(这是该函数中
true
应该做的),这难道不重要吗?如果我将脚本备份几行,然后再次运行,它就可以正常工作


我唯一的猜测是,
EnumerateFileSystemEntries
正在锁定一个文件,但我猜我会得到一个非常不同的异常(“访问被拒绝”或“文件被锁定”之类的情况)。

为什么要麻烦调用
EnumerateFileSystemEntries
?如果这是问题的原因,那么只需简化为:

if (Directory.Exists(_stagingDir))
{
    Directory.Delete(_stagingDir, true);
}

我怀疑出现此错误的原因是,
EnumerateFileSystemEntries
返回的枚举在调用
Delete()
时未被处理,这意味着它对文件系统项的句柄仍处于打开状态。你可以用
重写这个问题,用
来绕过这个问题,但实际上你最好还是完全删除多余的调用,如上所示。

Duh。。。不知道为什么我没有想到。谢谢