文件正在被另一个进程使用,如何知道是哪个进程?

8

我的程序一直报这个异常。怎样才能知道是哪个进程锁定了它,是通过程序代码还是通过在 Windows 上进行某些操作?

System.IO.IOException : 由于另一个进程正在使用文件“file.ext”,因此无法访问该文件。

3个回答

11

你可以使用ProcessExplorer搜索该文件:

只需运行它(也许需要以管理员权限启动),按下Ctrl-F,输入被锁定的文件名,它将找到所有匹配给定名称的打开句柄,并告诉你它属于哪个进程。


我怎样知道哪个进程正在使用该文件?因为当我尝试时,它似乎列出了所有最近的访问。 - Louis Rhys
1
@Louis RH:在使用具有管理员权限的帐户启动进程资源管理器后,您应该按Ctrl-F键或在菜单中选择“查找”/“查找句柄或DLL...”,然后输入您要搜索的文件名。所以请按照Kragen为您编写的内容执行即可。 - Oleg
@Louis - 可能是访问该文件的进程没有立即关闭它,这种情况下,Process Explorer 将为您找到那些句柄/进程 - 我不确定如何确定哪个句柄阻止了您对该文件的使用(并非所有句柄都会阻止对文件的访问 - 两个进程可以共享同一个文件,具体取决于每个进程请求的访问权限 - 读/写等)。 - Justin

2
您可以使用类似于ProcessMon这样的工具来查看哪个进程锁定了文件。

相比于ResourceMonitor和ProcessExplorer,这是我在我的情况下唯一可行的选择,因为它们都假定阻塞应用程序仍然掌握着文件,而当我开始查找谁在阻塞时,时间已经过去了。在我的情况下,我被MSBuild的一些临时文件搞糊涂了,显然是mcshield.exe在我的预构建命令中捣鬼,写入了临时批处理文件。 - jxramos

1

看看这个:http://www.emptyloop.com/unlocker/

我经常使用它,它会告诉你哪个进程锁定了它,并给你解锁的机会。特别有用的是当你调试图像处理应用程序时,它会在没有正确关闭文件的情况下崩溃。

希望这可以帮到你!

肖恩


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接