【问题标题】:Qt QFileSystemWatcher on WindowsWindows 上的 Qt QFileSystemWatcher
【发布时间】:2012-07-26 12:21:10
【问题描述】:

我有以下问题:我创建了一个 QFileSystemWatcher,它在 Linux 上运行良好,但在 Windows 7 上却不行。你能发现代码中的任何可能使它无法工作的地方吗?

谢谢。

这是初始化它的代码:

mConfigChangeWatcher = new QFileSystemWatcher();
mConfigChangeWatcher->addPath(config_file_name);

QObject::connect(mConfigChangeWatcher,
                 SIGNAL(fileChanged(QString)),
                 this,
                 SLOT(configFileChanged(QString)));

这应该是完成工作的槽:

void MyClass::configFileChanged(const QString &file)
{
    qDebug() << "Changed: " << file ;
}

【问题讨论】:

  • 也许路径必须以不同的方式表示?
  • 路径类似于:("C:/Users/fela/work/d_RTI-1638/build/Applications/Debug/conf/configuration.xml")(这是 mConfigChangeWatcher->files() 的输出
  • 我写了一个简单的应用程序,它可以工作。也许对于我们的情况,这与我们将应用程序移动到不同的线程,然后以某种方式丢失信号有关......

标签: qt qfilesystemwatcher


【解决方案1】:

当您在文件中第一次修改后使用QFileSystemWatcher::files() 方法检查文件是否添加到观察程序时,您得到正确的列表吗?

我遇到了一些应用程序在修改文件时从系统中删除旧文件并重新写入的问题。

请注意,一旦文件被重命名或从磁盘中删除,QFileSystemWatcher 将停止监视文件,一旦从磁盘中删除目录。

我正在使用 QFileSystemWatcher 观看由 Photoshop 编辑的图像文件。不知何故,该文件从被监视的文件列表中删除。

【讨论】:

  • 谢谢!我什至没有假设文件可以删除,然后在保存时创建它是某个应用程序。这解释了为什么我的 QFileSystemWatcher 在我编辑文件时停止监视它
  • 顺便说一句,我仍然不知道处理这个问题的正确方法。我的解决方法是使用单次计时器,然后再次添加要监视的文件。这并不适用于所有情况,但可以解决我当时的问题。
  • :) 我使用了完全相同的解决方法。我正在考虑的另一个解决方法是监视保存文件的目录。但第一个更简单,对我来说效果很好
【解决方案2】:

我遇到了同样的问题,很快就解决了。 在管理fileChanged 信号的插槽中,我注意到路径从files() 消失。我只是做一个检查并在必要时重新添加它

if (! watcher_.files().contains(path))
{
    watcher_.addPath(path);
}

希望对你有帮助

法比奥

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多