我希望在将文件添加到“/test”时收到通知。所以我使用了 QFilesystemWatcher 的 directoryChanged 信号。但是当“cp aa.txt /test”我得到directoryChanged信号时,当我阅读aa.txt时我有不完整的aa.txt。
在这种情况下,我如何知道文件已完成读取?
仅供参考,我不能使用 fileChanged 信号,因为不知道确切的文件名。
我希望在将文件添加到“/test”时收到通知。所以我使用了 QFilesystemWatcher 的 directoryChanged 信号。但是当“cp aa.txt /test”我得到directoryChanged信号时,当我阅读aa.txt时我有不完整的aa.txt。
在这种情况下,我如何知道文件已完成读取?
仅供参考,我不能使用 fileChanged 信号,因为不知道确切的文件名。
不幸的是,如果没有写入文件的进程的一些合作,一般无法知道这一点。写入过程需要锁定文件以进行独占访问,而读取过程需要继续尝试打开文件进行读取,直到它成功 - 当写入过程放弃锁定时。
信号告诉directoryChanged
你的只是盒子上的内容:目录已经改变,或者在这种情况下,目录中有一个新条目。这与该条目所代表的内容完全分开 - 文件的内容是什么。
文件系统监视器只是这里需要的一半,这不是 Qt 的问题,而是进程的问题。请记住,您正在尝试与作者合作。
作为一种解决方法,如果您有某种验证文件内容的方法,您可以在读取和验证文件时执行相同的操作:继续重试读取,在验证成功之前有一些延迟。为了避免资源使用失控,延迟形成指数回退可能是值得的。