4

用例:第 3 方应用程序希望以编程方式监视另一个程序正在生成的文本文件。文本文件包含您要在更新时分析的数据。

我在 FileSystemWatcher 周围找到了很多关于这个问题的答案,但是假设您正在为 Windows 机器编写应用程序并且不能保证已安装 .NET。

有没有可用的库,还是我只需要推出自己的解决方案?

谢谢。

4

4 回答 4

8

您可以在任何窗口上使用FindFirstChangeNotification监视目录。
如果您知道文件在哪里,这很有效 - 否则您可以使用下面描述的虚拟驱动程序/Filemon 来检查系统上任何地方的更改。

示例代码在这里

于 2008-10-23T22:30:22.057 回答
5

一个更简单的解决方案可能是检查文件的最后修改时间戳。

如果你使用 _stat64() 函数来做这件事,它就变成了一个跨平台的解决方案。

示例代码:

struct __stat64 fileinfo;

if(-1 != _stat64(filename, &fileinfo)
   return fileinfo.st_mtime;
于 2008-10-23T22:49:37.587 回答
1

看起来像这样:跟踪打开特定文件的进程

sysinternal再次 给出了一些提示和工具

于 2008-10-23T22:31:38.840 回答
1

这听起来很像来自 sysinternals(现在是 MS)的 FileMon。他们通过创建一个动态加载的虚拟设备驱动程序来做到这一点。他们很好地描述了它在这里的工作原理:

FileMon 的工作原理

对于 Windows 9x 驱动程序,FileMon 的核心是虚拟设备驱动程序 Filevxd.vxd。它是动态加载的,并在初始化时通过 VxD 服务 IFSMGR_InstallFileSystemApiHook 安装文件系统过滤器,以将自身插入到所有文件系统请求的调用链中。在 Windows NT 上,FileMon 的核心是一个文件系统驱动程序,它创建过滤设备对象并将其附加到目标文件系统设备对象,以便 FileMon 将看到所有指向驱动器的 IRP 和 FastIO 请求。当 FileMon 看到打开、创建或关闭调用时,它会更新一个内部哈希表,该哈希表用作内部文件句柄和文件路径名之间的映射。每当它看到基于句柄的调用时,它就会在哈希表中查找句柄以获得显示的全名。

于 2008-10-23T22:52:53.587 回答