确定文件是否已打开

有没有办法确定文件是否被任何包含未锁定文件的应用程序(如记事本)打开。

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

不。当记事本打开文件时,它已读取整个文件,然后将其关闭 。 因此,操作系统中没有跟踪记事本的私有内存与磁盘上的文件的痕迹。

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

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

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