gpt4 book ai didi

c++ - "QFileSystemWatcher: failed to add paths"但仍然有效

转载 作者:行者123 更新时间:2023-11-28 07:56:26 27 4
gpt4 key购买 nike

我需要监控一个文件系统,我有一个函数可以递归浏览文件夹和文件,并将它们的路径添加到我的 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: failed to add paths: C:/.../anyfile.ext

最奇怪的是它仍然有效。当我重命名/编辑文件或文件夹时,会触发 fileChanged 和 folderChanged 事件。

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

感谢阅读和帮助,

拉斐尔。

最佳答案

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

在循环的中间,您执行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();
}

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

关于c++ - "QFileSystemWatcher: failed to add paths"但仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com