文件正在Directory.Delete中使用Exception与邮件

时间:2015-05-19 12:47:37

标签: c# directory ioexception directoryinfo

您好我正在运行以下代码:

void bar()
{
    var dirInfo = new DirectoryInfo("C:\foo\folder");
    dirInfo.Delete();
}

有一次,我得到以下例外:

System.IO.IOException: The process cannot access the file 'C:\foo\folder' because it is being used by another process.
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)
at bar()

这里有两件事困扰我:

我调用了DirectoryInfo的Delete()。为什么我在没有DirectoryInfo的堆栈跟踪中获得Directory的Delete()?

为什么使用的文件与我的文件夹具有相同的路径?这是消息中的错误吗?或者有不同的错误?

1 个答案:

答案 0 :(得分:1)

要回答第一个问题,DirectoryInfo.Delete会致电Directory.Delete。如果您在发布模式下运行,编译器可能已经优化了您的代码,而您只是看到了基础调用。

编辑:我刚刚在VS2013中完成了一些测试。当我的项目是为Any CPU编译的发布版本时,我可以在堆栈跟踪中调用DirectoryInfo.Delete之前看到对Directory.Delete的调用:

StackTrace:
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)
   at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive, Boolean checkHost)
   at System.IO.DirectoryInfo.Delete()
   at test.Program.Main(String[] args) in c:\Projects\test\Program.cs:line 21

但是当我编译x64的发布版本时,它只显示了对Directory.Delete的调用:

StackTrace:
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)
   at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive, Boolean checkHost)
   at test.Program.Main(String[] args) in c:\Projects\test\Program.cs:line 22

看起来确实正在进行一些优化(顺便提一下,代码在测试之间没有变化 - 我猜测行号的变化也与编译器优化有关。)

看看这个问题 - directoryinfo delete vs directory delete

要回答您的其他问题 - 您是否在另一个应用中打开了目录中的文件?有很多原因导致另一个进程可能对该文件夹执行某些操作。