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 回、または無限に ('.' は常に最初の要素であるため) 通過し、'..' を使用すると、親ディレクトリの下にあるすべてのフォルダーのプロセスがやり直されます。
私はこれを素敵で洗練されたものにしたいのですが、これについて何か方法はありますか? または、プレーンなファイル名 (パスなし) を取得し、「.」に対してチェックする唯一の方法です。と '..'?