我正在尝试遍历给定的目录路径并且继续收集所有xml文件。但是,出于某种原因,我的结果只返回部分文件路径而不是所有文件路径。我不确定我的错误在哪里。
如果你们建议我不使用qtiterator并使用其他方法也可以。
QList<QDomNode> collect_library_nodes (const QString &path) {
// collect all xml files
QDir dir(path);
dir.setFilter(QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);
dir.setNameFilters(QStringList("*.xml"));
QList<QString> filepaths;
QDirIterator it(dir, QDirIterator::Subdirectories);
while(it.hasNext()) {
qDebug() << "FILE" << it.next();
filepaths.append(it.next());
}
qDebug() << 'COUNT:' << filepaths.count();
// collect xml nodes
QList<QDomNode> library_nodes;
return library_nodes;
}
当我运行程序时,由于子文件夹中有xml文件,因此我得到的文件数为15而不是27。
这是当前的输出:
Debugging starts
FILE: "C:/Users/Martini/Desktop/trash/master/a.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/c.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/e.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_a"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_b"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_c"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_d"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_e"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_e/r.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_f/s.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/v.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/x.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/h.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/j.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/l.xml"
COUNT: 16
它应该输出:
Debugging starts
FILE: "C:/Users/Martini/Desktop/trash/master/a.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/b.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/c.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/d.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/e.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/f.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/g.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/h.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/i.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/j.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/k.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/l.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_a/m.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_b/n.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_c/o.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_d/p.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_e/q.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_e/r.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_f/s.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_f/t.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/u.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/v.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/w.xml"
FILE: "C:/Users/Martini/Desktop/trash/master/folder_g/x.xml"
COUNT: 24
答案 0 :(得分:2)
您在循环中调用it.next()
两次。因此,您跳过每个第二个文件。换句话说,您在奇数位置输出每个文件路径并在偶数位置收集每个文件路径。
while(it.hasNext()) {
qDebug() << "FILE" << it.next();
filepaths.append(it.next());
}
应该如下所示:
while(it.hasNext()) {
const auto& fn = it.next();
qDebug() << "FILE" << fn;
filepaths.append(fn);
}
或者:
while(it.hasNext()) {
qDebug() << "FILE" << it.next();
filepaths.append(it.filePath());
}