【问题标题】:When I get directoryChanged signal from QFileSystemWatecher the file newly added is not completed to read当我从 QFileSystemWatcher 获得 directoryChanged 信号时,新添加的文件未完成读取
【发布时间】:2015-04-21 14:23:41
【问题描述】:
我希望在将文件添加到“/test”时收到通知。所以我使用了 QFilesystemWatcher 的 directoryChanged 信号。但是当“cp aa.txt /test”时,我得到了 directoryChanged 信号,当我阅读 aa.txt 时,我得到了不完整的 aa.txt。
在这种情况下,我如何知道文件已完成读取?
仅供参考,我不能使用 fileChanged 信号,因为不知道确切的文件名。
【问题讨论】:
标签:
qt
file-io
qfilesystemwatcher
【解决方案1】:
不幸的是,如果没有写入文件的进程的合作,一般无法知道这一点。写入进程需要锁定文件以进行独占访问,而读取进程需要继续尝试打开文件进行读取,直到成功 - 当写入进程取消锁定时。
directoryChanged 信号告诉你的只是它在盒子上写的内容:目录已经改变,或者在这种情况下,目录中有一个新条目。这与该条目所代表的内容(文件的内容是什么)完全不同。
文件系统监视器只是这里所需的一半,这不是 Qt 的问题,而是进程的问题。请记住,您正在尝试与作者合作。
作为一种解决方法,如果您有某种验证文件内容的方法,您可以在读取和验证文件时执行相同的操作:继续重试读取,并在验证成功之前稍作延迟。为了避免资源使用失控,延迟形成指数回退可能是值得的。