如何调试此错误? “进程无法访问文件X,因为它正由另一个进程使用”

时间:2014-07-30 16:02:48

标签: .net winapi filesystems

我正在使用文件系统API(在.NET或本机版本中)来尝试打开文件。我收到以下错误消息:

  

该进程无法访问文件X,因为它正由另一个进程使用。

这个错误意味着什么,我该如何调试?

2 个答案:

答案 0 :(得分:2)

此错误的含义:

此错误表示您尝试打开已使用冲突的访问权限和共享设置打开的文件。

该消息具有误导性,因为该文件不一定由其他进程打开。这是一个Win32级别的例外。它只是意味着为该文件打开了另一个句柄

此错误也适用于目录。

如何调试:

找出应用程序中的哪个进程或组件打开文件但尚未关闭它。您可以使用Sysinternals Process Explorer的“查找句柄”功能来查找有问题的过程并关闭句柄。

如果您自己的代码打开了句柄,则没有一般程序来查找问题。检查您的代码。评论代码,直到错误消失。

常见错误有:

  • 泄露FileStreamFile.Open(path); //leak!
  • 未在using语句中包装资源。在大多数情况下,一次性资源应该包含在using
  • 在某些应用中打开文件,例如:
    • 文字编辑器
    • 开发工具
    • 数据库服务器
    • 选择了相应文件的Windows资源管理器窗口
    • 命令提示符窗口,其相应的目录设置为当前目录

如何解决:

使用该文件关闭其他应用程序。完成后,请确保关闭文件句柄。使用using声明。

答案 1 :(得分:0)

  • 或者您正在使用的开发人员工具可能会像数据库查询工具那样打开文件吗?
  • 或者您打开了资源管理器窗口并选择了文件
  • 或命令行cd-ed到您与之交互的文件夹。