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

标签 c++ qt glob qtcore qdir

我正在寻找类似于 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

我试过条目列表,但它只能让我过滤当前文件夹中的内容。

最佳答案

您当然可以像这样使用嵌入式循环递归遍历:

main.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;
}

主程序

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

构建并运行

qmake && make && ./main

输出

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

关于c++ - 使用 QDir 过滤器列出子目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642435/

相关文章:

C++ 基本 while 循环,通过按键退出

c++ - 这是使用私有(private)继承权吗?

android - 如何将 OpenCV 头文件包含到 C++ 项目中?

c++ - 从 cryptopp::integer 转换为 QString

c++ - 在QT应用程序中制作一个透明孔

Ruby Dir.glob 问题仅在 Windows 上

arrays - Bash 扩展通配括号破坏数组初始化

php - opencart cookies 问题 - 如何解决?

c++ - 如何以UI形式打开QML?

bash extglob 范围或值匹配相同的文件名两次