C#如何判断哪个进程正在使用文件?

时间:2010-03-23 04:09:38

标签: c#

我变得非常普遍,“进程无法访问该文件,因为它正被另一个进程使用。”

现在我几乎可以肯定访问此文件的唯一进程来自我编写的代码,并且我一直小心地使用using语句来访问它。

但是要100%肯定,无论如何,当出现此错误时,是否以编程方式检查此内容?

3 个答案:

答案 0 :(得分:4)

Sysinternals Suite中还有一个小工具handle.exe可以完全满足您的需求。从命令行使用它:

handle.exe -a <filename>

当然,在Vista和Windows 7下,此工具必须升级。

答案 1 :(得分:0)

e.g。资源工具包中的oh.exe和sysInternals中的Process Explorer都显示谁正在使用什么

他们都使用C#中没有的技术。

答案 2 :(得分:0)

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

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

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