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。。。不知道为什么我没有想到。谢谢