Qt递归非递归遍历文件
来源:互联网 发布:linux切换到指定目录 编辑:程序博客网 时间:2024/06/05 20:29
qt最大的优势在于跨平台,虽然都说qt设计优良,文档丰富,但是qt一直不温不火的。不过跨平台确实可以节省不少人力物力,”一次编写,到处编译“,对于短期搭建框架也有优势.
#include <QDebug>#include <QDir>#include <QFile>#include <QFileInfo>#include <QFileInfoList>#include <QQueue>#include <QString>#include <QStringList>#include <QVector>QVector<QString> all_files;void DfsCollectFiles(const QString& filepath) // not recommended for deep directory{ QFileInfo curFileInfo(filepath); if (!curFileInfo.isDir()) return; QDir curDir(filepath); QFileInfoList curFileInfoList(curDir.entryInfoList()); if (curFileInfoList.empty()) return; QFileInfoList::const_iterator it; for (it = curFileInfoList.begin(); it != curFileInfoList.end(); ++it) { if (it->isDir() && it->fileName() != "." && it->fileName() != "..") { DfsCollectFiles(it->absoluteFilePath()); //recursively } else if (!it->isDir()) { all_files.push_back(it->absoluteFilePath()); } }}void BfsCollectFiles(const QString& filepath) // bfs traverse{ QFileInfo cur_fileinfo(filepath); QQueue<QFileInfo> fileinfo_queue; // queue QDir cur_dir(filepath); fileinfo_queue.enqueue(cur_fileinfo); while (!fileinfo_queue.isEmpty()) { cur_dir = fileinfo_queue.head().absoluteFilePath(); fileinfo_queue.dequeue(); QFileInfoList cur_fileinfolist = cur_dir.entryInfoList(); QFileInfoList::const_iterator it; for (it = cur_fileinfolist.cbegin(); it != cur_fileinfolist.cend(); ++it) { if (it->isDir() && it->fileName() != "." && it->fileName() != "..") { // jump "." and ".." fileinfo_queue.enqueue(it->absoluteFilePath()); // enqueue unresolved directories } else if (!it->isDir()){ all_files.push_back(it->absoluteFilePath()); } } }}
测试代码:
int main(){ QString filepath("/home/wnn/tmp"); QVector<QString>::const_iterator it; DfsCollectFiles(filepath); qDebug() << all_files.size(); for (it = all_files.cbegin(); it != all_files.cend(); ++it) qDebug() << *it; qDebug() << endl; all_files.clear(); BfsCollectFiles(filepath); for (it = all_files.cbegin(); it != all_files.cend(); ++it) qDebug() << *it; qDebug() << all_files.size(); return 0;}
关于上面代码命名的约定,类名和函数名用驼峰命名法,类的成员函数和qt一样用“小驼峰命名法”, 非成员函数用“大驼峰命名法”,变量名统一用小写字母加下划线,这样从名称就可以判定一个成员是什么类别。遍历完所有文件就可以自行根据绝对路径处理了。
类似用shell列出文件:ls -R | egrep "*.pdf" #列出所有pdf文件
不过还是python简单粗暴:
import osdef cur_walk(curDir): for parent, dirnames, filenames in os.walk(curDir): for filename in filenames: #files print os.path.abspath(os.path.join(parent, filename)) for dirname in dirnames: #directory print os.path.abspath(os.path.join(parent, dirname))curDir = '/home/wnn/tmp'cur_walk(curDir)
http://ningning.today/2015/01/12/c++/Qt%E9%80%92%E5%BD%92%E9%9D%9E%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86%E6%96%87%E4%BB%B6/
0 0
- Qt递归非递归遍历文件
- 非递归遍历文件
- 非递归遍历文件
- 递归与非递归 遍历文件目录
- 递归与非递归遍历文件目录
- 遍历磁盘文件的递归和非递归算法
- Qt递归遍历文件和文件夹
- 非递归遍历树
- 非递归遍历
- treeview遍历----非递归
- 非递归遍历文件夹
- 非递归遍历文件夹
- 非递归遍历文件夹
- 非递归遍历树
- 非递归遍历文件夹
- 非递归后续遍历
- 非递归前中后序遍历
- 非递归遍历树
- object c_专业名词
- 祝贺CSDN学院成功上线
- HDU 1016 Prime Ring Problem
- 朴素贝叶斯分类算法
- linux 下 apache启动、停止、重启命令
- Qt递归非递归遍历文件
- 对NSArray中自定义的对象进行排序
- highchars多Y轴实现(Jquery post请求)
- BlueDroid代码分析之数据传输过程
- 读入一个句子,把所有词都变成大写,输出,每个词占一行
- 阿里云服务器cent0S安装web环境PHP+MySql+Nginx,给nginx添加网站
- this 指向区分
- TPLINK WR703N刷OPENWRT
- 合伙人还有另一个创业的朋友一起