2017-02-01 3 views
-1

Ich habe Probleme beim rekursiven Lesen von Dateien. Werfen Sie einen Blick auf:QDirIterator: Lesen von Verzeichnissen und Unterverzeichnissen

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(); 

Mein Ziel ist hier, eine .txt-Datei zu lesen und die Zeilen darin zu zählen. In jedem Unterverzeichnis sollte dieselbe .txt-Datei mit demselben Namen enthalten sein. Das Problem besteht darin, dass der Iterator die gleiche .txt-Datei mehr als einmal liest.

Gibt es etwas, was ich tun könnte? Ändern Sie die Namen der TXT-Dateien ist das letzte, was ich möchte.

Vielen Dank für Ihre Geduld und Hilfe!

+0

Vergessen zu erwähnen, jede .TXT-Datei hat unterschiedliche Inhalte. – GDias

Antwort

0

Ich denke, der Iterator geht durch. und auch. Das bedeutet, dass jede Datei dreimal gelesen wird. Versuchen Sie den Konstruktor, in dem Sie das Verzeichnis-Filter mit dem Wert QDir :: NoDotAndDotDot

QDirIterator it(directory, QDirIterator::Subdirectories); 

von

QDirIterator it(directory, QDir::NoDotAndDotDot, QDirIterator::Subdirectories); 
+0

Seltsamerweise setzt der Iterator ".hasNext" auf false und kehrt zurück. Liest nichts. – GDias

+0

Verwenden Sie 'QDir :: AllEntries | QDir :: NoDotAndDotDot' als Filter. –

+0

Immer noch das Gleiche ... – GDias

0

Verstanden

versuchen Wechsel passieren kann!

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; 
} 

Das einzige, was ich brauchte, war zu tun, ein QString zu bekommen die „it.next()“ am Ende zu empfangen. Danke für die Hilfe ... die Fahnen haben mir sehr geholfen!

Verwandte Themen