繁体   English   中英

如何监视文件的更改?

[英]how to monitor a file for changes?

我如何监视rtf文件以检查它是否被更新了一段时间(比如说15分钟)。 如果不更新,则让主线程知道该文件未更新。 我正在考虑使用WaitforSingleObject函数来等待最近15分钟内的任何更改。 如何实现这种功能?

我相信正在寻找的是文件更改通知,例如FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesW您可以监视文件或目录的更改,重命名,写入等。

由于您提到WaitForSingleObject,因此您的平台大概是Windows。 在这种情况下,您要查找的功能是ReadDirectoryChangesW 这将使您在进行更改后立即得到通知,而无需执行任何轮询。

吉姆·贝弗里奇(Jim Beveridge)撰写了一篇很棒的文章,其中涉及到一些深层次的内容:

您可以stat()文件,检查其修改日期并采取适当措施。

您还可以定期计算文件的校验和,并将其与前一个校验和进行比较。

对于RTF文件,您还可以获取文件的大小并将其与以前的大小进行比较; 如果对其进行了修改,则大小很可能会有所不同。

所有这些方法可能会比其他人提到的系统调用引入更多的开销。

我认为,您可以通过两种方式实现这一目标。 您可以编写文件过滤器驱动程序,以监视文件的写操作。 但是,这有点牵强。

另一种方法很简单。 在主线程中,创建RTF文件的哈希并对其进行缓存。 在非信号状态下创建事件,创建回调函数,创建工作线程。 等待事件中的工作线程15分钟。 timout之后,再次生成文件的哈希并将其与缓存的哈希进行比较。 如果不匹配,请通过回调函数通知您的主线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM