使用 QDir 的过滤器列出子目录中的文件
List files in sub-directories with QDir's filter
我正在寻找一个类似于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]:
- 将根设置为
root_directory
然后 - 使用过滤器(PNG,JPJ或您需要的内容)搜索所有图像,然后
- 然后生成一个介于 0 和
list.size()
之间的伪随机数,并且 - 使用它作为获取图像路径的索引,
- 最后,您将在要返回的
QImage
对象的构造函数中使用。
相关文章:
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 从所有列出的文件和子目录中更改目录
- 获取每个目录或子目录中第一个文件的路径
- Qt创建者:加载位于子目录中的项目文件
- 如何在子目录中创建文本文件?
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- 生成文件:子目录的模式规则
- CMake 子目录 - 编译测试子项目时,包含的头文件没有此类文件或目录
- 节点构建失败。无法在包含目录的子目录中找到库头文件
- 这是在生成文件中包含子目录的正确方法吗?
- 使用C 列出目录中的文件,而不是递归,只有文件和无子目录
- CMAKE:将静态库从子目录链接到另一个子目录中的可执行文件
- 在目录和子目录C 中计数具有特定扩展名的文件
- CMake 从子目录和父目录链接文件
- 创建目录中所有.cpp文件和 android.mk 子目录中的FILE_LIST
- 一种使用 boost 和 c++ 列出目录和子目录中所有文件的方法
- 如何在子目录中生成包含源的生成文件
- 用于列出子目录中所有文件的递归功能
- 扫描目录和子目录中的.txt文件
- 如何在cllion中编译子目录文件