QFileSystemWatcher 不为另一个应用程序所做的更改发出 fileChanged 信号

Posted

技术标签:

【中文标题】QFileSystemWatcher 不为另一个应用程序所做的更改发出 fileChanged 信号【英文标题】:QFileSystemWatcher not emitting fileChanged signal for changes done by another application 【发布时间】:2017-06-16 23:07:28 【问题描述】:

我正在尝试检测由另一个 tcl/python 应用程序修改的文件中的更改。 我对文件使用了 QFileSystemWatcher addPath。 它不会为文件更改发出 fileChanged(QString) 信号。 但是,当我手动编辑这些文件时,会发出 fileChanged 信号并执行 slot。

【问题讨论】:

【参考方案1】:

检查在你的 tcl\python 程序中你实际上使用 f.close() \ f.flush() \ 使用 'with' 语句将数据刷新到文件中。

附: 有时 python 会等到执行结束才将数据实际写入文件。如果这就是这里发生的情况,那么在 tcl\python 程序结束执行之前不会更改文件,因此在此之前也不会发出信号。

【讨论】:

我检查了 tcl 代码。该文件有一个关闭的 $outPort。对于 python 代码,文件是通过像这样移动 tempFile 来创建的: runCmd = "mv -f %s %s" % (tmpFile, liveFile) os.system(runCmd) 我想看 3 个文件。它适用于由另一个 python api 创建的第一个文件。未检测到其他两个文件。我只添加了两个不起作用但没有运气的文件进行测试。

以上是关于QFileSystemWatcher 不为另一个应用程序所做的更改发出 fileChanged 信号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QFileSystemWatcher 监视文件夹的更改

Qt 文件监视器 QFileSystemWatcher

Qt 之 QFileSystemWatcher

使用 QFileSystemWatcher 获取更改文件的路径?

用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)

用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)