2017-02-01 18 views
-1

ファイルを再帰的に読み取るときに問題が発生します。見てみよう:QDirIterator:ディレクトリとサブディレクトリを読み取る

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

ここでの目的は、.txtファイルを読み込んでその中の行を数えることです。各サブディレクトリには、同じ名前の同じ.txtファイルがあるはずです。問題は、イテレータが同じ.txtファイルを複数回読み込むことです。

私にできることはありますか? .txtファイルの名前を変更することは、私が望む最後のものです。

ご理解とご協力をいただきありがとうございます。

+0

各.txtファイルには内容が異なります。 – GDias

答えて

0

私が推測するように、イテレータはスロウになります。そしてまた..つまり、各ファイルは3回読み込まれます。 それを手に入れた

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

不思議なことに、イテレータは ".hasNext"をfalseに設定して返します。何も読まない。 – GDias

+0

'QDir :: AllEntries | QDir :: NoDotAndDotDot'をフィルタとして使用します。 –

+0

まだ同じこと... – GDias

0

によって

QDirIterator it(directory, QDirIterator::Subdirectories); 

変更してみてください、あなたが値QDir :: NoDotAndDotDot

でDIR-フィルタを渡すことができますコンストラクタを使用してみてください!

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

私が行うために必要な唯一のものは末尾に「it.next()」を受け取るためのQStringを取得することでした。助けてくれてありがとう...フラグが大いに役立った!

関連する問題