【发布时间】:2010-07-02 20:51:11
【问题描述】:
有没有办法确定文件是否被任何东西打开,包括不锁定文件的应用程序(如记事本)。
我需要检测给定文件 myfile.txt 何时不再在包括记事本在内的任何应用程序中打开 - 所以我不能使用具有独占访问权限的 File.Open(...) 来测试,因为该文件没有锁定它。
【问题讨论】:
-
这不是重复的。记事本没有打开的文件句柄。
有没有办法确定文件是否被任何东西打开,包括不锁定文件的应用程序(如记事本)。
我需要检测给定文件 myfile.txt 何时不再在包括记事本在内的任何应用程序中打开 - 所以我不能使用具有独占访问权限的 File.Open(...) 来测试,因为该文件没有锁定它。
【问题讨论】:
没有。当记事本打开一个文件时,它会在中读取整个文件,然后将其关闭。因此,操作系统中没有任何痕迹将记事本的私有内存与磁盘上的文件联系起来。
以独占方式打开文件将不起作用,因为记事本没有打开文件。搜索记事本的句柄表将不起作用,因为记事本没有打开文件。
检测这种情况的唯一方法是编写一个非托管 DLL,注入每个进程以扫描它们的虚拟内存,搜索确切的文件内容。不推荐。
【讨论】:
您必须调用 File.Open(...) 指定所需的访问标志并检查返回值以确定文件是否已打开或访问是否被拒绝。这是访问文件的推荐且安全的方法。
【讨论】: