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