Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ QDirIterator:读取目录和子目录_C++_Qt - Fatal编程技术网

C++ QDirIterator:读取目录和子目录

C++ QDirIterator:读取目录和子目录,c++,qt,C++,Qt,我在递归读取文件时遇到一些问题。看一看: QDir absoPath; QString directory = QFileDialog::getExistingDirectory(); QDirIterator it(directory, QDirIterator::Subdirectories); while(it.hasNext()){ absoPath = it.next(); QFile totalFiles(absoPath.absolutePath() + "\\

我在递归读取文件时遇到一些问题。看一看:

QDir absoPath;
QString directory = QFileDialog::getExistingDirectory();

QDirIterator it(directory, QDirIterator::Subdirectories);
while(it.hasNext()){
    absoPath = it.next();

    QFile totalFiles(absoPath.absolutePath() + "\\Total_imagens.txt");
    totalFiles.open(QIODevice::ReadOnly | QIODevice::Text);
    if(totalFiles.isOpen()){
        QTextStream in(&totalFiles);
        while(!in.atEnd()){
        qDebug() << in.readLine();
QDir路径;
QString目录=QFileDialog::getExistingDirectory();
QDirIterator-it(目录,QDirIterator::子目录);
while(it.hasNext()){
absoPath=it.next();
QFile totalFiles(absolutePath.absolutePath()+“\\Total\u imagens.txt”);
totalFiles.open(QIODevice::ReadOnly | QIODevice::Text);
if(totalFiles.isOpen()){
QTextStream(总文件(&totalFiles));
而(!in.atEnd()){

qDebug()我想,迭代器会遍历。还有..。这意味着每个文件都要读取3次。 尝试使用构造函数,其中可以传递值为QDir::NoDotAndDotDot的dir过滤器

试着改变

QDirIterator it(directory, QDirIterator::Subdirectories);

明白了

QString absoPath;
    QString directory = QFileDialog::getExistingDirectory();

QDirIterator it(directory,QDir::AllEntries |QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
absoPath = it.path();
while(it.hasNext()){

    QFile totalFiles(absoPath + "\\Total_imagens.txt");
    totalFiles.open(QIODevice::ReadOnly | QIODevice::Text);
    if(totalFiles.isOpen()){
        QTextStream in(&totalFiles);
        while(!in.atEnd()){
        qDebug() << in.readLine();
        totalFiles.close();

    }
}
    absoPath = it.next();
}
qDebug() << "Over";
return;
}
QString路径;
QString目录=QFileDialog::getExistingDirectory();
QDirIterator it(目录,QDir::AllEntries | QDir::NoDotAndDotDot,QDirIterator::子目录);
absoPath=it.path();
while(it.hasNext()){
QFile totalFiles(绝对路径+“\\Total\u images.txt”);
totalFiles.open(QIODevice::ReadOnly | QIODevice::Text);
if(totalFiles.isOpen()){
QTextStream(总文件(&totalFiles));
而(!in.atEnd()){

qDebug()忘了提到,每个.txt文件都有不同的内容。奇怪的是,迭代器将“.hasNext”设置为false并返回。不读取任何内容。尝试使用
QDir::AllEntries | QDir::NoDotAndDotDot
作为过滤器。
QString absoPath;
    QString directory = QFileDialog::getExistingDirectory();

QDirIterator it(directory,QDir::AllEntries |QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
absoPath = it.path();
while(it.hasNext()){

    QFile totalFiles(absoPath + "\\Total_imagens.txt");
    totalFiles.open(QIODevice::ReadOnly | QIODevice::Text);
    if(totalFiles.isOpen()){
        QTextStream in(&totalFiles);
        while(!in.atEnd()){
        qDebug() << in.readLine();
        totalFiles.close();

    }
}
    absoPath = it.next();
}
qDebug() << "Over";
return;
}