Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;QFileSystemWatcher:未能添加路径";但仍然有效_C++_File_Qt_Qfilesystemwatcher - Fatal编程技术网

C++ &引用;QFileSystemWatcher:未能添加路径";但仍然有效

C++ &引用;QFileSystemWatcher:未能添加路径";但仍然有效,c++,file,qt,qfilesystemwatcher,C++,File,Qt,Qfilesystemwatcher,我需要监视一个文件系统,我有一个递归浏览文件夹和文件的功能,可以将它们的路径添加到QFileSystemWatcher: void watchFileSystem(const QDir& dir, QFileSystemWatcher& watcher) { watcher.addPath(dir.absolutePath()); QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirector

我需要监视一个文件系统,我有一个递归浏览文件夹和文件的功能,可以将它们的路径添加到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事件

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

感谢您的阅读和帮助


Raphael.

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

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

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

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();
}
这将在提供给函数的目录下添加所有文件夹和文件