监视正在读取的文件的文件夹

Kez*_*Kez 6 vb.net file-io windows-7

我正在尝试查看目录中的文件以确定何时打开/访问文件.我以为FileSystemWatcher会用这个事件来做Changed.

问题是某些应用程序不会对他们打开/访问的文件创建锁定,也不会更改修改日期或访问日期(甚至之后fsutil behavior set disablelastaccess 0).记事本例如.显然是在内存中制作文件的副本并在那里播放,直到你保存它.它也不会更新访问日期.

如何监视文件目录,并在任何程序(例如记事本)打开/访问文件时收到通知? 文件可以从另一台计算机打开,不一定在运行"观察者"的计算机上打开.

我发现了许多类似的问题,但没有看到一个专注于文件"访问".

Han*_*ant 2

这是很正常的。更新现有文件非常危险,因为它可能会导致无法挽回的数据丢失。写入时发生磁盘错误(例如磁盘已满)是非常坏的消息。常用的算法:

  • 重命名原始文件
  • 使用原始名称写入新文件
  • 没有错误:删除重命名的文件
  • 错误:删除新文件,将原始文件重命名回来

显然,这不会导致引发 Changed 事件,没有文件被更改。


抱歉,我没有仔细阅读问题。对于仅打开文件进行读取的应用程序来说,没有任何通知。FSW 只能检测文件系统的更改。也没有现成的替代方案,这需要一个自定义文件系统过滤驱动程序来监听驱动程序请求。就像 SysInternals 的 ProcMon 实用程序使用的那种。我不知道有这样的驱动程序可以在 C# 程序中使用,您也不能用 C# 编写它们。这并不是一个常见的要求。