QT遍历文件夹下的所有文件
文章目录
- 方法一
- 代码
- 方法二
- 需要注意的地方
- 代码
- 技巧
- 代码
方法一
使用类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
这个比较强大,可以指明要遍历的文件名,以及遍历的标准和排序功能。至于entryInfoList
和entryList
他们的关系是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遍历文件夹下的所有文件相关推荐
- C#遍历得到指定文件夹下的所有文件和子文件夹
1.遍历指定文件夹下的所有文件 string path = Application.StartupPath + "\\data\\采集数据\\"; DirectoryInfo ro ...
- python遍历指定文件夹的所有文件_python 统计指定文件夹下所有的文件数量,BFS方式...
python 统计指定文件夹下所有的文件数量 本来一直是有这个需求,只是以前写的是递归的方式处理,感觉对资源的占用不友好,而且python的最大递归深度不超过1000,所以改了一下,这里用广度优先遍历 ...
- java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- C/C++遍历Windows文件夹下的所有文件
因为文件夹中往往包含文件和文件夹.想要遍历所有的文件,必须遍历文件夹中所有的文件夹.很显然,这个描述满足递归的两个要素:(1)问题的规模在不断的缩小,且新问题的模式与旧问题相同.很显然文件夹中含有子文 ...
- 遍历读取文件夹下的所有文件
遍历读取文件夹下的所有文件 例如,读取文件夹下,子文件夹的所有的jpg文件: import glob path = "./database/20230302/night/*/*.jpg&qu ...
- 深入探讨:linux中遍历文件夹下的所有文件
深入探讨:linux中遍历文件夹下的所有文件 http://www.jb51.net/article/37664.htm
- c语言 遍历文件夹中所有文件名,C# 遍历文件夹下所有子文件夹中的文件,得到文件名...
假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中 using System.Data; using System.Drawing; using System.Linq; using ...
- c++ 遍历文件夹下的所有文件
遍历文件夹下的所有文件:代码实现 #include <iostream> #include <dirent.h> #include <vector> #includ ...
- java遍历文件夹下的_Java遍历文件夹下的所以文件
利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...
- python遍历文件夹下所有excel文件_读取某文件夹下所有excel文件 python
import os import pandas as pd from sklearn import linear_model path = r'D:\新数据\每日收益率' filenames = os ...
最新文章
- 教育培训行业如何在抖音快速获客、变现?
- 基于Chrome的扩展开发(二)
- Exchange 2010 创建设备室邮箱
- Flash Media Server 4.5下载
- 【2016年第4期】欧盟数据可携权评析
- HTML期末作业-美食网站
- iOS 修改webView字体
- 领导秘书,一般都是什么样的人?
- 微软语音识别技术屡破世界纪录的秘密都在这里了
- 计算机设备操作与讲解,第五章计算机操作系统设备管理讲解.ppt
- 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
- 计算机开机密码设置要求,电脑设置开机密码
- MTK刷机工具Flash_Tool部分4032错误解决办法
- 台式电脑计算机怎么打不开怎么回事,为什么电脑自带的软件打不开怎么办
- 一定能用到的简单但实用的五种按钮样式(HTML+CSS步骤详解,含详细注释)
- 《实变函数简明教程》,P91,定理4.8(iii)(对等的可测函数同时可积或同时不可积)
- 有哪些便宜好用的虚拟主机推荐?
- 夜神模拟器adb连接电脑
- 微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
- 7-97 约会成功了吗