Qt递归获取指定文件夹下的所有文件

2023-11-06

方法一

使用类QDirIterator来进行遍历。简介
在这里插入图片描述大概是说,适合于大目录遍历,支持递归但是不支持排序。
在这里插入图片描述QDirIterator::NoIteratorFlags默认值,没有标志,迭代器将返回path符合QDir::Filters的条目。
QDirIterator::Subdirectories同时列出所有子文件下符合QDir::Filters规则的条目

QDirIterator it(dirPath, QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::AllDirs);

返回目录下的所有文件和子文件目录,不包括文件链接和. ..

QDirIterator it(dirPath, QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot);

返回目录下所有文件(此时没有子文件文件目录),不包括文件链接和. ..
代码

void Widget::on_pushButton_clicked()
{
    QStringList list;
    QString dirPath = "F:\\dirTest";
    QDirIterator it(dirPath, QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::AllDirs, QDirIterator::Subdirectories);
    while(it.hasNext())
    {
        it.next();
        if(it.fileInfo().suffix() == "icd")
        {
            list.append(it.fileInfo().absoluteFilePath());
        }
    }
    foreach(QString str, list)
    {
        qDebug() << str;
    }
}

输出

"F:/dirTest/nihao/qunimade/max.icd"
"F:/dirTest/nihao/明天.icd"
"F:/dirTest/tayehao/nihao.icd"
"F:/dirTest/wobuhao.icd"

方法二

使用QDir类的 entryInfoList
在这里插入图片描述这个比较强大,可以指明要遍历的文件名,以及遍历的标准和排序功能。至于entryInfoListentryList他们的关系是entryInfoList返回的是QFileInfoList我们一般使用前者,因为QFileInfo有很多方便的接口。
需要注意的地方
1.如何让entryInfoList返回所有的条目(包括子文件夹下的条目),至少需要指明QDir::AllDirs。只是文档并没有直说的地方(至少我觉得)。
2.默认参数 Filters filters = NoFilter并不是说什么都不列出。而是
A default constructed QDir will not filter out files based on their permissions, so entryList() and entryInfoList() will return all files that are readable, writable, executable, or any combination of the three. This makes the default easy to write, and at the same time useful.会返回可读或可写或可执行。或者符合这三个任意组合的文件或文件目录条目。
代码

void Widget::getAllFiles(const QString &dirPath)
{
    QDir dir(dirPath);
    QFileInfoList list = dir.entryInfoList(QDir::Files | QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
    foreach(QFileInfo fileInfo, list)
    {
        if(fileInfo.isDir())
        {
            getAllFiles(fileInfo.absoluteFilePath());
        }
        else
        {
            fileList.append(fileInfo.absoluteFilePath());
        }
    }
}

输出

"F:/dirTest/nihao/qunimade/max.icd"
"F:/dirTest/nihao/明天.icd"
"F:/dirTest/tayehao/nihao.icd"
"F:/dirTest/wobuhao.icd"

技巧
在这里插入图片描述
QDirIterator构造函数参数 nameFilters 是可以支持一些简单的正则表达式的。就上面的例子(寻找某一个文件下说有以.icd)结尾的文件还可以这样写。
代码

   QString dirPath = "F:\\dirTest";
    QStringList list;
    QDirIterator it(dirPath, QStringList() << "*.icd", QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
    while(it.hasNext())
    {
        it.next();
        list.append(it.fileInfo().absoluteFilePath());
    }
    foreach(QString str, list)
    {
        qDebug() << str;
    }

输出

"F:/dirTest/nihao/qunimade/max.icd"
"F:/dirTest/nihao/明天.icd"
"F:/dirTest/tayehao/nihao.icd"
"F:/dirTest/wobuhao.icd"

修改为

QDirIterator it(dirPath, QStringList() << "*hao.icd", QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);

输出

"F:/dirTest/tayehao/nihao.icd"
"F:/dirTest/wobuhao.icd"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt递归获取指定文件夹下的所有文件 的相关文章

  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • Qt - 获取互联网上托管的网页的源代码(HTML 代码)

    我想获取网页的源代码 HTML 例如StackOverflow的主页 这是我到目前为止编写的代码 QNetworkAccessManager manager QNetworkReply response manager get QNetwo
  • 如何将 zlib 添加到现有的 qt 安装中

    如何将 zlib 添加到 Qt 的现有安装中 我对此很陌生 所以请给我详细的描述 提前感谢您的帮助 zlib 包含在 Qt 核心库中 如果你想在 Qt 程序中使用 zlib 函数 你只需要包含 src 3rdparty zlib 中的 zl
  • 将 QByteArray 从大端转换为小端

    我想我在这里有点不知所措 我尝试了这么简单的事情 我不敢相信没有任何内置的 Qt 使用 Qt 5 6 2 我尝试将 QByteArray 内的数据从大端转换为小端 总是从相同的测试 QByteArray 开始 就像这样 QByteArray
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width
  • 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个绘图

    由于我没有得到答案this https stackoverflow com questions 12179893 creating a scrollable multiplot with pythons pylab我尝试用 PyQt 解决这
  • 为什么总是在 mouseDoubleClickEvent 之前调用 mousePressEvent

    请考虑以下代码 include
  • 将 UTC 格式的 QDateTime 转换为本地系统时间

    我从这样的字符串构造 QDateTime QDateTime date QDateTime fromString 2010 10 25T10 28 58 570Z yyyy MM ddTHH mm ss zzzZ 我知道date是 UTC
  • QWidget::showMinimized() 不起作用

    在 Ubuntu 13 04 上 如果使用QWidget showMinimized 为了最小化窗口 我发现通过单击系统任务栏上的应用程序图标恢复它后 调用QWidget showMinimized 无法工作 connect minimum
  • 常量类成员、赋值运算符和 QList

    请确认我是否正确并告诉我是否有更好的解决方案 我了解具有常量成员的对象 例如int const width 无法由编译器隐式创建的合成赋值运算符处理 但是 QList 我想 std list 也是如此 需要一个有效的赋值运算符 因此 当我想
  • QWebSocketServer - 不释放内存

    首先 我在安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题 在 Qt Memcheck 中我必须检查 外部错误 看到它 一些字节是肯定输了 指着我的main就在我的地方QCoreApplication ex
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • 包含 Qt 标头的正确方法是什么?

    到目前为止我知道几种方法 includeQt 类 include
  • Qt 编译器标志顺序

    我的目标是消除某些类型的编译器警告 我发现可以通过在 pro 文件中添加编译器标志来做到这一点 QMAKE CXXFLAGS Wno unused variable Wno reorder 问题是它们被添加在 Qt 构建系统生成的标志之前
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • 无法将 [未定义] 分配给 QColor

    我正在使用 Qt 5 11 构建 运行代码 代码中有QML风格如下 Button style delegate Component id enabledButtonStyle ButtonStyle padding top 0 paddin
  • MapItemView 在 dataChanged 信号后不会更新

    我正在使用 QMLMapItemView使用 C 的组件QAbstractListModel基于模型 这MapItemView当模型重置时 或者每当添加新项目或删除现有项目时 工作正常 但是 那MapItemView不反映对已添加项目的更改
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no

随机推荐

  • Android开发中Javassist的妙用

    Javassist Java字节码以二进制的形式存储在 class文件中 每一个class文件包含一个Java类或接口 Javassist框架就是一个用来处理Java字节码的类库 它可以在一个已经编译好的类中添加新的方法 或者修改已有的方法
  • pytorch 下载

    pytorch 下载 使用anconda 直接下载pytorch的朋友应该是知道pytorch是个啥的 所以直接上教程 anconda下载 anconda是一个用于下载和管理python依赖包和环境的一个工具 下载详情可以去看这篇文章 an
  • VMware虚拟机nat模式连不上网

    我的虚拟机总是各种连不上网 每次都要折腾一番 现在我把虚拟机连不上网的原因总体排查一下 按照流程一步步来 基本上可以解决大部分人的问题 首先 在VMware的编辑 gt 虚拟网络编辑器重新建立 网络 之前的要删掉 新建的同样选择 就可以 如
  • 线性回归总结

    向量相似理论 线性回归 比如预测房价中学区属性0 4 居住体验0 2 通勤距离0 2 商业环境0 2等因素 在同一价格区间 只有样本特征与上述属性分布一致时 各方面都加权均衡 才能取得高分 任一单一属性过高 必然导致其他属性降低 通常意义上
  • Flutter音频播放之just_audio

    just audio的使用 just audio 它是一个用于播放音频的 Flutter 插件 安装和导入 just audio 要使用 just audio 库 需要将其添加到项目的 pubspec yaml 文件中 dependenci
  • Update your application to remove the dependency cycle between beans

    Spring 高版本循环依赖问题 问题描述 提示 Spring boot 应用启动报错 Relying upon circular references is discouraged and they are prohibited by d
  • 三大战略引擎加速转动,微盟驶入智慧商业服务深水区

    2023年3月30日 微盟披露了2022年财报 经调整总收入18 39亿元 经调整毛利11 2亿元 在业务层面 订阅解决方案业务表现亮眼 其中智慧零售板块营收5 13亿元 同比内生增长45 5 拉动每用户平均收益同比增长12 3 达1296
  • (四) 区块链数据结构 – 脚本

    脚本是交易数据中的核心部分 可用于锁定输出和解锁输入 当向某人支付比特币时 我们要为交易输入设置解锁脚本 向别人证明我们有全力使用该输入 同时我们还需要对交易输出添加锁定脚本 确保只有接收者能解锁该输出 脚本 比特币系统专门设计了一套脚本语
  • games101——作业1

    文章目录 作业要求 代码框架 已有代码解读 作业部分代码 进阶部分代码 编译 结果 作业要求 在接下来的三次作业中 我们将要求你去模拟一个基于 CPU 的光栅化渲染器的简化版本 这次作业简要来说就是补全两个函数的内容 一个是 get mod
  • 数据结构实验9:并查集的使用

    问题描述 给定一个图 图中有N个顶点 1 lt N lt 500 编号依次为1 2 3 N 部分顶点之间存在一条无向边 请找出图中所有的极大连通子图 其中 极大联通子图可以描述为该子图中任意两个顶点之间都存在一条路径 且加入任何一个不在该子
  • 会议论文_干货

    研鹿论文 沿路有我 写好论文就找我 有很多同学对会议论文和期刊论文的界定并不是那么明确 那么小鹿今天就为大家详细介绍一下吧 1 会议论文是针对某个学术会议投稿的 且由学术会议的会务组决定是否录用 期刊论文则是针对某学术期刊投稿的 且是由期刊
  • python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程 协程 多线程 多进程 CPU密集型计算与IO密集型计算 多线程 多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者 消费者爬虫 Lock解决线程安全问题 使用线程池ThreadPoolExecutor 多
  • 深度学习的局部响应归一化LRN(Local Response Normalization)理解

    1 其中LRN就是局部响应归一化 这个技术主要是深度学习训练时的一种提高准确度的技术方法 其中caffe tensorflow等里面是很常见的方法 其跟激活函数是有区别的 LRN一般是在激活 池化后进行的一中处理方法 AlexNet将LeN
  • github 配置了公钥依旧提示git@github.com‘s password: Permission denied, please try again. 的解决办法

    最近在给新电脑配置GitHub的ssh时 一切都是按照流程进行github上文档的配置流程进行配置 但是把公钥配置到github后 在对仓库进行操作的时候依旧出现一下提示 git github com s password Permissi
  • c++链表实现多项式相加

    文章目录 链表实现多项式相加 数据结构 结构体定义 链表 多项式 初始化 Insert 插入单个节点 多项式的某一项 input 输入 sum 求和函数 print 输出函数 测试代码 测试结果 链表实现多项式相加 例如 已知多项式 L 1
  • 良心分享:基于Java+SpringBoot+Netty+WebSocket+Uniapp轻松搭建准实时聊天问答程序

    一步一步教你搭建准实时聊天问答程序 微信小程序 H5网页 本文将详细介绍如何基于你自己的开源项目搭建一个准实时聊天问答程序 包括微信小程序和H5网页版 该项目服务端主要使用了Java Spring Boot Netty WebSocket等
  • 傻瓜式鸿蒙3.0使用Google(无需电脑)

    首先声明 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 可以先给
  • jsp+mysql分页技巧:巧用limit 进行分页查询

    发现问题 今天检查web程序 浏览 彩信xxxx日志 时 突然发现该web程序中不能浏览了 出错了 如下 500 Servlet Exception java lang OutOfMemoryError Resin 3 0 6 built
  • 文件描述符的阻塞与非阻塞设置

    默认文件描述符是阻塞的 即文件IO是阻塞的 设置为非阻塞 int setNonBlock int fd int flags fcntl fd F GETFL if flags 1 return flags flags O NONBLOCK
  • Qt递归获取指定文件夹下的所有文件

    方法一 使用类QDirIterator来进行遍历 简介 大概是说 适合于大目录遍历 支持递归但是不支持排序 QDirIterator NoIteratorFlags默认值 没有标志 迭代器将返回path符合QDir Filters的条目 Q