当我从 QFileSystemWatecher 收到 directoryChanged 信号时,新添加的文件未完成读取

When I get directoryChanged signal from QFileSystemWatecher the file newly added is not completed to read

我想在文件添加到“/test”时收到通知。所以我使用了 QFilesystemWatcher 的 directoryChanged 信号。但是当 "cp aa.txt /test" 我收到 directoryChanged 信号时,当我阅读 aa.txt 我有不完整的 aa.txt。

在这种情况下如何知道文件读取完成?

仅供参考,我无法使用 fileChanged 信号,因为不知道确切的文件名。

不幸的是,如果没有写入文件的进程的一些合作,通常无法知道这一点。写入进程需要锁定文件以进行独占访问,读取进程需要不断尝试打开文件进行读取,直到成功 - 当写入进程解除锁定时。

directoryChanged 信号告诉您的就是它在框中的内容:目录已更改,或者在这种情况下,目录中有一个新条目。这与该条目所代表的内容完全不同——文件的内容是什么。

文件系统观察器只是这里需要的一半,这不是 Qt 的问题,而是进程的问题。请记住,您正在尝试与作者合作。

作为变通方法,如果您有某种验证文件内容的方法,则可以在读取和验证文件时执行相同的操作:继续重试读取,并延迟一段时间直到验证成功。为避免资源使用失控,延迟形成指数回退可能是值得的。