用例:第 3 方应用程序希望以编程方式监视另一个程序正在生成的文本文件。文本文件包含您要在更新时分析的数据。
我在 FileSystemWatcher 周围找到了很多关于这个问题的答案,但是假设您正在为 Windows 机器编写应用程序并且不能保证已安装 .NET。
有没有可用的库,还是我只需要推出自己的解决方案?
谢谢。
用例:第 3 方应用程序希望以编程方式监视另一个程序正在生成的文本文件。文本文件包含您要在更新时分析的数据。
我在 FileSystemWatcher 周围找到了很多关于这个问题的答案,但是假设您正在为 Windows 机器编写应用程序并且不能保证已安装 .NET。
有没有可用的库,还是我只需要推出自己的解决方案?
谢谢。
您可以在任何窗口上使用FindFirstChangeNotification监视目录。
如果您知道文件在哪里,这很有效 - 否则您可以使用下面描述的虚拟驱动程序/Filemon 来检查系统上任何地方的更改。
示例代码在这里
一个更简单的解决方案可能是检查文件的最后修改时间戳。
如果你使用 _stat64() 函数来做这件事,它就变成了一个跨平台的解决方案。
示例代码:
struct __stat64 fileinfo;
if(-1 != _stat64(filename, &fileinfo)
return fileinfo.st_mtime;
看起来像这样:跟踪打开特定文件的进程
sysinternal再次 给出了一些提示和工具
这听起来很像来自 sysinternals(现在是 MS)的 FileMon。他们通过创建一个动态加载的虚拟设备驱动程序来做到这一点。他们很好地描述了它在这里的工作原理:
FileMon 的工作原理
对于 Windows 9x 驱动程序,FileMon 的核心是虚拟设备驱动程序 Filevxd.vxd。它是动态加载的,并在初始化时通过 VxD 服务 IFSMGR_InstallFileSystemApiHook 安装文件系统过滤器,以将自身插入到所有文件系统请求的调用链中。在 Windows NT 上,FileMon 的核心是一个文件系统驱动程序,它创建过滤设备对象并将其附加到目标文件系统设备对象,以便 FileMon 将看到所有指向驱动器的 IRP 和 FastIO 请求。当 FileMon 看到打开、创建或关闭调用时,它会更新一个内部哈希表,该哈希表用作内部文件句柄和文件路径名之间的映射。每当它看到基于句柄的调用时,它就会在哈希表中查找句柄以获得显示的全名。