フォルダー内のすべてのファイルを再帰的に取得しようとしていますが、ばかげているように見えます。
を使用するsetNameFilters
と、フォルダー名もフィルター処理されるため、フォルダー内にファイルがなく、サブフォルダーのみがある場合、ループは失敗します。そのため、現在、内部ループを 2 回実行しています。1 つは、名前フィルターを使用せずにすべてのサブフォルダーを検索するためです。名前フィルターを持つすべてのファイルに対して 1 つ。
それらを梳く正しい方法は何ですか?すべてのフォルダー、およびフィルターに準拠するすべてのファイルが必要です (そして、ループ内のファイルまたはフォルダーであるかどうかを判断します)
QStringList FileFind::dir2files(const QString &path)
{
QStringList files;
QStack<QString> stack;
stack.push(path);
while (! stack.isEmpty())
{
QDir dir (stack.top());
stack.pop();
foreach (const QFileInfo & fileInfo,
dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs))
{
stack.push_back(fileInfo.absoluteFilePath());
}
dir.setNameFilters(_nameFilters);
foreach (const QFileInfo & fileInfo,
dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files) )
{
files.append(fileInfo.absoluteFilePath());
}
}
return files;
}