我正在尝试使用QFileSystemWatcher
查看日志文件,但每次修改日志文件时都不会始终发出fileChanged
信号。知道QFileSystemWatcher
如何确定文件是否被修改(在Windows上)?
答案 0 :(得分:2)
QFileSystemWatcher'
的性能完全取决于底层平台提供的内容。通常绝对不能保证如果一个进程正在写入文件,其他一些进程将立即看到这些更改。 QFileSystemWatcher
的行为可能会告诉您这一事实。日志写入过程可能会选择刷新文件。根据平台,刷新的语义可能是这样的,当flush()
返回时,其他进程可以保证能够在flush()
之前看到对文件所做的更改。如果是这样,那么您希望QFileSystemWatcher
通知您更改。
随着平台获得新功能,QFileSystemWatcher
可能会滞后于新文件系统通知API的实现。您需要阅读其来源,以确定它是否支持您所选择的平台在这方面提供的所有内容。
您需要在您打算支持的每个平台上限定QFileSystemWatcher
的行为。您可能会发现,在某些情况下,定期轮询文件信息可能会更好 - 再次,轮询和QFileSystemWatcher
之间的选择应该在逐个平台的基础上进行,因为轮询可能会产生不必要的开销,如果观察者在给定的平台上工作正常。