gpt4 book ai didi

c++ - 显示并读取目录中的所有文件

转载 作者:行者123 更新时间:2023-11-30 01:52:57 25 4
gpt4 key购买 nike

我正在尝试打印出目录中所有文件的文件名。但是有些文件没有显示或无法打开。

如果我重新启动程序,以前无法打开的文件实际上会打开并显示出来。这是怎么回事?

这是我的代码:

 QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
iterator.next();



QFile file(iterator.next());

if ( file.open( QIODevice::ReadOnly ) ) {
qDebug() << QFileInfo(file).fileName() << endl;


} else {
qDebug() << "Can't open " << QFileInfo(file).fileName() << endl;
}
}

最佳答案

这里有一个问题:

 iterator.next();
QFile file(iterator.next());
if ( file.open( QIODevice::ReadOnly ) ) {

您正试图在循环内将迭代器推进两次。这意味着您可能会遍历表示无效文件的最后一个元素,然后由于明显的原因而失败。

根据文件夹的内容,即它是否为下一次运行而略有变化,即添加或删除一个文件,此循环可能会在下一次“工作”,即它尝试打开的所有文件都将被打开,但它仍然会跳过其形式的文件。

正确的解决方法是从迭代中删除这一行:

iterator.next();

因此,为了您的方便,您的整个代码将是这样的:

QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
QFile file(iterator.next());
if ( file.open( QIODevice::ReadOnly ) )
qDebug() << "Opened:" << file.fileName() << endl;
else
qDebug() << "Can't open " << file.fileName() << file.errorString() << endl;
}

根据评论至少要注意两点:

  • 您可以使用 the errorString() method在这种情况下获取更多信息。

  • 您不需要构造 QFileInfo 来获取文件名。 QFile 对象 already has a method for that. .问题是您正在递归迭代,因此,您只打印出基本名称而不知道文件所在的位置。如果不同子目录中存在同名文件,也可以多次显示同一个文件名。

关于c++ - 显示并读取目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23772314/

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