8

Qt 関数を使用してディレクトリを再帰的にたどるのに少し問題があります。私がやろうとしていること:

指定したディレクトリを開きます。ディレクトリをウォークスルーし、別のディレクトリに遭遇するたびに、そのディレクトリを開き、ファイルをウォークスルーします。

さて、私はこれについてどのように行っていますか:

QString dir = QFileDialog::getExistingDirectory(this, "Select directory");
if(!dir.isNull()) {
    ReadDir(dir);
}

void Mainwindow::ReadDir(QString path) {
    QDir dir(path);                            //Opens the path
    QFileInfoList files = dir.entryInfoList(); //Gets the file information
    foreach(const QFileInfo &fi, files) {      //Loops through the found files.
        QString Path = fi.absoluteFilePath();  //Gets the absolute file path
        if(fi.isDir()) ReadDir(Path);          //Recursively goes through all the directories.
        else {
            //Do stuff with the found file.
        }
    }
}

さて、私が直面している実際の問題: 当然、entryInfoList も「.」を返します。および「..」ディレクトリ。この設定では、これが大きな問題であることがわかります。

'.' に入ると、ディレクトリ全体を 2 回、または無限に ('.' は常に最初の要素であるため) 通過し、'..' を使用すると、親ディレクトリの下にあるすべてのフォルダーのプロセスがやり直されます。

私はこれを素敵で洗練されたものにしたいのですが、これについて何か方法はありますか? または、プレーンなファイル名 (パスなし) を取得し、「.」に対してチェックする唯一の方法です。と '..'?

4

1 に答える 1

13

ドキュメントで説明されているように、 でQDir::NoDotAndDotDotフィルタを使用するようにしてください。entryInfoList

編集

  • この投稿 でQDir::Files説明されているように、ファイルやディレクトリを追加するQDir::Dirsことを忘れないでください。QDir::AllFiles

  • この前の質問も確認してください。

于 2012-08-28T11:48:38.703 に答える