我有一个暂存目录,如果在我的脚本中使用它,我想清理它。代码很简单:
if (Directory.Exists(_stagingDir) &&
Directory.EnumerateFileSystemEntries(_stagingDir).Any())
{
Directory.Delete(_stagingDir, true);
}
有时,它失败并出现“目录不为空”的IO异常。如果我递归删除里面的所有项目(这是true
应该在该函数中做什么),那不应该没关系吗?如果我将脚本备份几行并再次运行它,它可以正常工作。
我唯一的猜测是EnumerateFileSystemEntries
正在锁定文件,但我猜想我会得到一个非常不同的例外(“拒绝访问”或“文件锁定”或其他内容)。
答案 0 :(得分:1)
为什么要打扰EnumerateFileSystemEntries
呢?如果这是您的问题的原因,那么只需简化为:
if (Directory.Exists(_stagingDir))
{
Directory.Delete(_stagingDir, true);
}
我怀疑你收到此错误的原因是EnumerateFileSystemEntries
返回的枚举在你调用Delete()
时没有被释放,这意味着它对文件系统条目的处理是还开着。您可以用using
重写此问题以解决问题,但如上所示,您最好完全删除多余的调用。