使用 QDir 的过滤器列出子目录中的文件

List files in sub-directories with QDir's filter

本文关键字:子目录 文件 QDir 过滤器 使用      更新时间:2023-10-16

我正在寻找一个类似于python glob函数的函数。

If my folder structure is:
folder1/abc1.txt
folder1/xyz1.txt
folder1/abc2.txt
folder2/abc3.txt
folder2/xyz4.txt
folder3/abc5.txt

那么如果我给*/abc*,我正在寻找以下输出:

folder1/abc1.txt
folder1/abc2.txt
folder2/abc3.txt
folder3/abc5.txt

我尝试了 entrylist,但它只是让我过滤当前文件夹中的内容。

当然,您可以使用如下所示的嵌入式循环递归遍历:

主.cpp

#include <QDir>
#include <QFileInfoList>
#include <QString>
#include <QStringList>
#include <QDebug>
void traverse(const QString &pattern, const QString &dirname, int level)
{
    QDir dir(dirname);
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
    static const QStringList stringList = pattern.split('/');
    foreach (QFileInfo fileInfo, dir.entryInfoList(stringList.mid(level, 1))) {
        if (fileInfo.isDir() && fileInfo.isReadable())
            traverse(pattern, fileInfo.filePath(), level+1);
        else if (stringList.size() == (level + 1))
            qDebug() << fileInfo.filePath();
    }
}
int main()
{
    traverse("*/abc*", ".", 0);
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建和运行

qmake && make && ./main

输出

"./folder1/abc1.txt"
"./folder1/abc2.txt"
"./folder2/abc3.txt"
"./folder3/abc5.txt"

适用于使用新版本QT的用户

我的建议是,使用[qdirEntryList][1]:

  1. 将根设置为root_directory
  2. 然后
  3. 使用过滤器(PNG,JPJ或您需要的内容)搜索所有图像,然后
  4. 然后生成一个介于 0 和 list.size() 之间的伪随机数,并且
  5. 使用它作为获取图像路径的索引,
  6. 最后,您将在要返回的QImage对象的构造函数中使用。