我变得非常普遍,“进程无法访问该文件,因为它正被另一个进程使用。”
现在我几乎可以肯定访问此文件的唯一进程来自我编写的代码,并且我一直小心地使用using语句来访问它。
但是要100%肯定,无论如何,当出现此错误时,是否以编程方式检查此内容?
答案 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并让它进行搜索。