【问题标题】:"QFileSystemWatcher: failed to add paths" but still works“QFileSystemWatcher:添加路径失败”但仍然有效
【发布时间】:2012-09-27 00:04:59
【问题描述】:

我需要监视一个文件系统,我有一个函数可以递归地浏览文件夹和文件,并将它们的路径添加到我的 QFileSystemWatcher 中:

void watchFileSystem(const QDir& dir, QFileSystemWatcher& watcher)
{
    watcher.addPath(dir.absolutePath());
    QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories);
    while (iterator.hasNext()) {
        QString foldername = QString(iterator.fileName());
        if (foldername != "." && foldername != ".." && foldername != "")
            watcher.addPath(iterator.filePath());
        iterator.next();
        if (!iterator.fileInfo().isDir()) {
            watcher.addPath(iterator.filePath());
        }
    }
}

运行时,每个“watcher.addPath(iterator.filePath());”我在控制台中有此错误消息:

QFileSystemWatcher:添加路径失败:C:/.../anyfile.ext

最奇怪的是它无论如何都可以工作。当我重命名/编辑文件或文件夹时,会触发 fileChanged 和 folderChanged 事件。

有人知道发生了什么吗? 我担心我的程序不稳定,这个错误不能白白显示。

感谢阅读和帮助,

拉斐尔。

【问题讨论】:

    标签: c++ file qt qfilesystemwatcher


    【解决方案1】:

    显示警告是因为您的循环添加了两次文件:

    在循环的中间,您执行iterator.next();。 如果将迭代器移动到文件中,它将被添加到下一个 if 语句中。现在你的循环继续,但仍然指向同一个文件。如果文件夹名称不是“.”、“..”或“”,则不是文件,则再次添加相同的文件。

    我已经重组了您的循环以使其正常工作:

    while (iterator.hasNext()) 
    {    
        QString fileOrFolderName = QString(iterator.fileName());
    
        // Skip non-folders
        if (fileOrFolderName == "." || fileOrFolderName == ".." || 
            fileOrFolderName == "")
        {
            iterator.next();
            continue;
        }
    
        // Add the folder or file
        watcher.addPath(iterator.filePath());
        iterator.next();
    }
    

    这将添加提供给函数的目录下的所有文件夹和文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2012-12-07
      • 1970-01-01
      相关资源
      最近更新 更多