【问题标题】: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 的问题,而是进程的问题。请记住,您正在尝试与作者合作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多