【发布时间】:2010-09-24 16:01:58
【问题描述】:
我正在使用 .NET 3.5,尝试使用以下方法递归删除目录:
Directory.Delete(myPath, true);
我的理解是,如果文件正在使用或存在权限问题,这应该抛出,否则它应该删除目录及其所有内容。
但是,我偶尔会得到这个:
System.IO.IOException: The directory is not empty.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
...
我对这个方法有时会抛出并不感到惊讶,但是当递归为真时,我很惊讶得到这个特定的消息。 (我知道目录不是空的。)
我看到这个而不是 AccessViolationException 有什么原因吗?
【问题讨论】:
-
您不会看到 AccessViolationException -- 这是针对无效指针操作的,而不是针对磁盘访问的。
-
这似乎确实是某种 IO 问题,而不仅仅是目录不为空,例如打开的文件句柄之类的。我会尝试使用递归删除选项,然后在捕获 IOException 时,搜索并关闭任何打开的文件句柄,然后重试。这里有一个讨论:stackoverflow.com/questions/177146/…