如何以编程方式检测哪个程序捕获了我的文件

时间:2011-03-29 11:44:42

标签: c# winapi .net-3.5 io

我的程序尝试将一些数据写入文本文件。但有时这个文件可以由其他程序专门打开。

如何以编程方式检测哪个程序捕获了我的文件?我必须知道用户友好的程序名称(这是我的第二个问题:))它做到了。

1 个答案:

答案 0 :(得分:3)

您通过尝试打开文件时获得的IOException来检测它。这是多任务操作系统的必然之举,没有可靠的方法来实现File.IsLocked()方法。 Windows没有API函数。因为如果这样的函数返回false,则另一个进程可能会中断您的程序并锁定该文件。当你得到cpu后,你会发现该文件仍被锁定。这被称为线程竞赛。

因此,使用FileStream构造函数打开文件。如果要从另一个进程写入的文件中读取,请传递FileShare.ReadWrite。您必须允许ReadWrite共享,其他进程已获得写访问权限。抓住你可能获得的IOException,你将不得不'再次'尝试。告诉用户,她可能知道如何帮助你。就像关闭另一个程序一样。

顺便说一句,Windows没有提供任何方法来找出文件被锁定的其他进程。有一些实用程序,如SysInterals的Handle实用程序。它通过未记录的内部内核结构与动态安装的设备驱动程序进行交互。没有什么是你想要解决的。