C++ &引用;QFileSystemWatcher:未能添加路径";但仍然有效
我需要监视一个文件系统,我有一个递归浏览文件夹和文件的功能,可以将它们的路径添加到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
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();
}
这将在提供给函数的目录下添加所有文件夹和文件