我正在尝试以递归方式获取文件夹中的所有文件,但它看起来很愚蠢,
如果我使用setNameFilters
,它也会过滤文件夹名称,因此如果一个文件夹里面没有文件,而只有子文件夹,则循环将失败。所以现在我做了两次内部循环,一次用于查找所有没有名称过滤器的子文件夹;一个用于所有带有名称过滤器的文件。
梳理它们的正确方法是什么?我想要所有文件夹,以及所有符合过滤器的文件(我会判断它是循环中的文件还是文件夹)
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;
}