确定文件是否已打开

时间:2010-07-02 02:35:51

标签: c# file-io

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

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