文章目录

  • 方法一
    • 代码
  • 方法二
    • 需要注意的地方
    • 代码
  • 技巧
  • 代码

方法一

使用类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"

QT遍历文件夹下的所有文件相关推荐

  1. C#遍历得到指定文件夹下的所有文件和子文件夹

    1.遍历指定文件夹下的所有文件 string path = Application.StartupPath + "\\data\\采集数据\\"; DirectoryInfo ro ...

  2. python遍历指定文件夹的所有文件_python 统计指定文件夹下所有的文件数量,BFS方式...

    python 统计指定文件夹下所有的文件数量 本来一直是有这个需求,只是以前写的是递归的方式处理,感觉对资源的占用不友好,而且python的最大递归深度不超过1000,所以改了一下,这里用广度优先遍历 ...

  3. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  4. C/C++遍历Windows文件夹下的所有文件

    因为文件夹中往往包含文件和文件夹.想要遍历所有的文件,必须遍历文件夹中所有的文件夹.很显然,这个描述满足递归的两个要素:(1)问题的规模在不断的缩小,且新问题的模式与旧问题相同.很显然文件夹中含有子文 ...

  5. 遍历读取文件夹下的所有文件

    遍历读取文件夹下的所有文件 例如,读取文件夹下,子文件夹的所有的jpg文件: import glob path = "./database/20230302/night/*/*.jpg&qu ...

  6. 深入探讨:linux中遍历文件夹下的所有文件

    深入探讨:linux中遍历文件夹下的所有文件 http://www.jb51.net/article/37664.htm

  7. c语言 遍历文件夹中所有文件名,C# 遍历文件夹下所有子文件夹中的文件,得到文件名...

    假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中 using System.Data; using System.Drawing; using System.Linq; using ...

  8. c++ 遍历文件夹下的所有文件

    遍历文件夹下的所有文件:代码实现 #include <iostream> #include <dirent.h> #include <vector> #includ ...

  9. java遍历文件夹下的_Java遍历文件夹下的所以文件

    利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...

  10. python遍历文件夹下所有excel文件_读取某文件夹下所有excel文件 python

    import os import pandas as pd from sklearn import linear_model path = r'D:\新数据\每日收益率' filenames = os ...

最新文章

  1. 教育培训行业如何在抖音快速获客、变现?
  2. 基于Chrome的扩展开发(二)
  3. Exchange 2010 创建设备室邮箱
  4. Flash Media Server 4.5下载
  5. 【2016年第4期】欧盟数据可携权评析
  6. HTML期末作业-美食网站
  7. iOS 修改webView字体
  8. 领导秘书,一般都是什么样的人?
  9. 微软语音识别技术屡破世界纪录的秘密都在这里了
  10. 计算机设备操作与讲解,第五章计算机操作系统设备管理讲解.ppt
  11. 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
  12. 计算机开机密码设置要求,电脑设置开机密码
  13. MTK刷机工具Flash_Tool部分4032错误解决办法
  14. 台式电脑计算机怎么打不开怎么回事,为什么电脑自带的软件打不开怎么办
  15. 一定能用到的简单但实用的五种按钮样式(HTML+CSS步骤详解,含详细注释)
  16. 《实变函数简明教程》,P91,定理4.8(iii)(对等的可测函数同时可积或同时不可积)
  17. 有哪些便宜好用的虚拟主机推荐?
  18. 夜神模拟器adb连接电脑
  19. 微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
  20. 7-97 约会成功了吗

热门文章

  1. Pooling 操作合集
  2. AQR:构建更稳健的商品期货组合
  3. 51单片机——控制步进电机加速、减速及反转
  4. 个人微信开发API协议接口大全
  5. C语言 良乡足球场 割草机问题
  6. 跨境电商亚马逊广告的六大痛点,九大思维误区
  7. 华为数通HCIE面试项目题——100台路由器组网
  8. NRF24L01模块多发一收通信(STM32)
  9. Canvas 绘制 3d 圆柱体
  10. go连接mysql集群_Mysql集群方案-Go语言中文社区