1

如何监视 rtf 文件以检查它是否更新了一段时间(比如说 15 分钟)。如果没有更新,那么让主线程知道该文件没有更新。我正在考虑使用 WaitforSingleObject 函数等待过去 15 分钟内的任何更改。我怎样才能实现这个功能?

4

4 回答 4

4

我相信正在寻找的是文件更改通知,例如FindFirstChangeNotification, FindNextChangeNotification,并且ReadDirectoryChangesW您监视文件或目录的更改、重命名、写入等。

于 2013-08-30T07:16:39.180 回答
2

大概您的平台是 Windows,因为您提到了 WaitForSingleObject。在这种情况下,您正在寻找的功能是ReadDirectoryChangesW。这将允许您在进行更改后立即收到通知,而无需执行任何轮询。

Jim Beveridge 有两篇深入探讨的优秀文章:

于 2013-08-30T07:17:42.370 回答
0

在我看来,您可以通过两种方式实现这一目标。您可以编写一个文件过滤器驱动程序来监视对文件的写操作。然而,这有点牵强。

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

于 2013-08-30T07:36:05.930 回答
0

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

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

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

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

于 2013-08-30T07:19:53.960 回答