代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

C如何辨别使用文件的过程?

c#
  •  0
  • JL. Hans Passant  · 技术社区  · 14 年前

    我得到了一个非常常见的“进程无法访问文件,因为它正被另一个进程使用。”

    现在,我几乎可以确定访问这个文件的唯一过程是来自我编写的代码,并且在访问它时我一直小心地使用了一个using语句。

    但100%肯定的是,当发生这个错误时,是否有任何程序检查?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Anton    14 年前

    中还有一个小工具handle.exe Sysinternals Suite 这正是你需要的。从命令行使用它:

    handle.exe -a <filename>
    

    当然,在Vista和Windows7下,这个工具必须以提升的方式运行。

        2
  •  0
  •   Ben Voigt    14 年前

    例如,来自资源工具包的oh.exe和来自SysInternals的Process Explorer都显示了谁在使用什么

    它们都使用C_中没有的技术。

        3
  •  0
  •   Dean Harding    14 年前

    Windows Vista添加了一个新功能, GetRunningObjectTable 可以用来检测哪个程序打开了文件。这仅在Vista+中有效,并且仅当打开文件的应用程序实际实现对 IFileIsInUse (例如,Office支持它,但大多数第三方应用程序可能不支持)。

    除此之外,通常的实现方法是打开每个进程,枚举它们打开的文件句柄,并搜索相关的文件名。这是非常低级的,需要相当多的P/Invoke才能在C中实现,但这并非不可能。

    打开ProcessExplorer并让它进行搜索通常很容易。