如何监控文件的变化?

时间:2013-08-30 07:01:02

标签: c++ winapi

如何监控rtf文件以检查它是否已更新一段时间(比方说15分钟)。如果没有更新,那么让主线程知道该文件没有更新。我正在考虑使用WaitforSingleObject函数来等待最后15分钟的任何更改。我该如何实现这种功能呢?

4 个答案:

答案 0 :(得分:4)

我认为正在寻找的是文件更改通知,例如FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesW,您监视文件或目录以进行更改,重命名,写入等操作。

答案 1 :(得分:2)

大概是你的平台是Windows,因为你提到了WaitForSingleObject。在这种情况下,您要查找的功能是ReadDirectoryChangesW。这样,您可以在更改后立即收到通知,而无需执行任何轮询。

Jim Beveridge有一篇很好的文章,深入探讨:

答案 2 :(得分:0)

您可以stat()该文件,检查其修改日期并采取适当的行动。

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

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

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

答案 3 :(得分:0)

在我看来,你可以通过两种方式实现这一目标。您可以编写一个文件筛选器驱动程序,可以监视该文件的写入操作。然而,这有点拉伸。

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