如何监控rtf文件以检查它是否已更新一段时间(比方说15分钟)。如果没有更新,那么让主线程知道该文件没有更新。我正在考虑使用WaitforSingleObject函数来等待最后15分钟的任何更改。我该如何实现这种功能呢?
答案 0 :(得分:4)
我认为正在寻找的是文件更改通知,例如FindFirstChangeNotification
,FindNextChangeNotification
和ReadDirectoryChangesW
,您监视文件或目录以进行更改,重命名,写入等操作。
答案 1 :(得分:2)
大概是你的平台是Windows,因为你提到了WaitForSingleObject。在这种情况下,您要查找的功能是ReadDirectoryChangesW。这样,您可以在更改后立即收到通知,而无需执行任何轮询。
Jim Beveridge有一篇很好的文章,深入探讨:
答案 2 :(得分:0)
您可以stat()
该文件,检查其修改日期并采取适当的行动。
您还可以定期计算文件的校验和,并将其与之前的文件进行比较。
对于RTF文件,您还可以获取文件的大小并将其与之前的大小进行比较;如果它被修改了,它的大小很可能会有所不同。
所有这些方法可能会引入比其他人提到的系统调用更多的开销。
答案 3 :(得分:0)
在我看来,你可以通过两种方式实现这一目标。您可以编写一个文件筛选器驱动程序,可以监视该文件的写入操作。然而,这有点拉伸。
另一种方式很简单。在主线程中,创建RTF文件的哈希并缓存它。在非信号状态下创建事件,创建回调函数,创建工作线程。在工作线程中等待事件15分钟。在timout之后,再次生成文件的哈希并将其与缓存哈希进行比较。如果不匹配,请通过回调函数通知主线程。