2010-07-02 180 views
7

有什么方法可以确定文件是否由任何包含不锁定文件的应用程序(如记事本)打开。确定文件是否打开

我需要检测何时给定的文件myfile.txt不再在包括记事本在内的任何应用程序中打开 - 所以我不能使用File.Open(...)与独占访问来测试,因为文件没有锁定它。

+0

可能重复的[如何获得C#中的进程打开的文件句柄列表?](http://stackoverflow.com/questions/177146/how-do-i-get-the-list-of-按c中的进程打开文件句柄) – 2010-07-02 02:37:26

+1

这不是重复的。记事本没有打开的文件句柄。 – 2010-07-02 12:49:41

回答

7

编号当记事本打开文件时,它已经读取了中的整个文件,然后关闭它。因此,在操作系统中没有将记事本的私有内存与磁盘上的文件链接起来的痕迹。

独占打开文件不起作用,因为记事本没有打开文件。搜索记事本的句柄表将不起作用,因为记事本没有打开该文件。

检测此问题的唯一方法是编写一个注入每个进程的非托管DLL来扫描其虚拟内存,以搜索确切的文件内容。不建议。

0

必须调用File.Open(...)指定所需的访问标志并检查返回值以确定文件是否已打开或访问是否被拒绝。这是访问文件的推荐和安全方式。