这三个类相互有关联,但是有不尽相同,首先从名字上看,QDir 和 QDirIterator 是针对于文件目录的,也就是文件夹,我们知道,对于一个文件夹,可以包含很多文件,也可以包含其他文件夹,通常是一个树的结构。文件夹里还可以包含符号链接,符号链接是指向其他文件或文件夹的一种链接,和Windows系统中的快捷方式有些类似,具体可参考这里。而QFileInfo主要是针对某一个具体的文件,来保存和这个文件相关的所有信息,比如文件名,路径啥的。下面来看一个例子,是通过递归方法来查询所有.mp3文件:

void recurseAddDir(QDir d, bool recursive=true, bool symlinks=false ) {d.setSorting( QDir::Name );QDir::Filters df = QDir::Files | QDir::NoDotAndDotDot;if (recursive) df |= QDir::Dirs;if (not symlinks) df |= QDir::NoSymLinks;QStringList qsl = d.entryList(df, QDir::Name | QDir::DirsFirst);foreach (const QString &entry, qsl) {QFileInfo finfo(d, entry);if ( finfo.isDir() ) {QDir sd(finfo.absoluteFilePath());recurseAddDir(sd);} else {if (finfo.completeSuffix()=="mp3")addMp3File(finfo.absoluteFilePath()); }}
}

上面那个例子在递归函数recurseAddDir()中调用了功能函数addMp3File(),严重的限制了该函数的可重用性,下面来看用Iterator Pattern来实现的版本:

int main (int argc, char* argv[]) {QCoreApplication app(argc, argv);QDir dir = QDir::current();if (app.arguments().size() > 1) {dir = app.arguments()[1];}if (!dir.exists()) {cerr << dir.path() << " does not exist!" << endl;usage(); return -1;}QDirIterator qdi(dir.absolutePath(),QStringList() << "*.mp3",QDir::NoSymLinks | QDir::Files,QDirIterator::Subdirectories );while (qdi.hasNext()) {addMp3File(qdi.next());}
}

这样设计的好处是提高了代码可重用性,而且更简单了,这就是Design Pattern的魅力所在。

转载于:https://www.cnblogs.com/grandyang/p/4289564.html

QDir, QFileInfo 和 QDirIterator 区别相关推荐

  1. Qt_QDir_常见的操作

    概念 在Qt中,查找遍历目录下的文件,主要涉及到QDir,QFileInfo,QFileInfoList三个类. QDir是专门提供访问目录结构和内容的类,给定一个路径即可得到访问的对象句柄. QFi ...

  2. QT笔记——QDir,QFileInfo类

    #include<QDir> QDir这是一个获取路径类 常用的方法有: 路径是否为空 isEmpty() QString str = "D:/QT5.12test/test/m ...

  3. c++ Qt5学习笔记 2021-1-21(文件系统QFile、QFileInfo、QDir、QFileSystemWatcher等使用,读取文本显示乱码,QDataStream二进制字节流读写)

    文件目录操作相关类: QFile:除了打开文件操作外,QFile还有复制文件.删除文件等功能. QCoreApplication:用于提取应用程序路径.程序名等文件信息. QFileInfo:用于提取 ...

  4. QT QFile、QDir、QFileInfo的使用

    1.QIODevice 直接继承自QObject QIODevice类是输入/输出设备的基类. QIODevice为设备提供了公共实现和抽象接口用于读写块数据. QIODevice是一个抽象类,不能被 ...

  5. QT——QFile、QDir、QFileInfo

    目录 QFile QDir 目录用法 文件用法 静态方法 QDir中的Filter枚举变量 QDir中的SortFlag枚举变量 QDir 名称过滤器 设置显示特定扩展名 QFileInfo QFil ...

  6. QDir的mkpath和mkdir的区别

    //1 QDir dir; qDebug()<<dir.mkpath("d:/w/w/w"); qDebug()<<dir.mkdir("d:/a ...

  7. QDir的mkdir和mkpath区别

    mkdir:上层目录不存在时,创建会失败.比如创建"c:\\test\test",如果test不存在,那test也创建不了.目录已经存在时会返回false. mkpath:上层目录 ...

  8. Qt扫盲-QDir类的学习和使用

    Qt5的QDir类的学习 文章目录 Qt5的QDir类的学习 概述: 相对路径与绝对路径 相对性判断 存在性判断 相对路径转绝对路径 导航和路径操作 获取和设置QDir的值 切换路径 新建删除重命名文 ...

  9. QT的QDirIterator类的使用

    详细说明 QDirIterator类为目录条目列表提供了一个迭代器. 您可以使用QDirIterator一次浏览一个目录条目. 它与QDir :: entryList()和QDir :: entryI ...

最新文章

  1. R语言中strptime返回值永远为NA的问题
  2. 在Spring MVC中使用多个属性文件
  3. 设计模式之十一:抽象工厂模式(Abstract Factory)
  4. 子弹短信 android,子弹短信精简版
  5. Kubernetes的系统架构与设计理念
  6. solr6.6.2之拼音联想
  7. 基于AVL-CRUISE 2014电动汽车建模与仿真之建模(一)
  8. W10注册表及其打开方法
  9. 程序设计的最基本的三种结构
  10. 用html做一个漂亮的网站,个人网页,css
  11. Flash视频教程一把抓,自动获取Flash教程----谭石南
  12. java制造业生产管理系统源码
  13. 百度地图api根据地图缩放等级显示不同的marker点
  14. 《C语言程序设计》江宝钏主编-习题8-4-复制字串!!!
  15. 计算机计算公式单组数据求乘法,(excel表格全部数据怎么乘以一个数啊)
  16. 计算机中文件夹怎么上密码,怎样设置电脑文件夹密码
  17. 移动端布局之flex布局
  18. 区块链100讲:如何使用开发环境命令行注册EOS靓号及变更EOS账号的active key和owner key?
  19. 程序员如何获取自己学习路线(附带前端学习路线)
  20. 信息泛滥,抽奖集赞:微信如何扼杀了用户的独立和自由

热门文章

  1. python 批量更换图片格式脚本
  2. 解决Linux下音乐乱码的问题:
  3. Sonata 0.7
  4. JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
  5. qhfl-9 微信模板消息推送
  6. Python 析构方法__del__
  7. cdh 安装_CDH的介绍和部署
  8. Codis安装与部署
  9. 基于实时深度学习的推荐系统架构设计和技术演进
  10. Apache Flink在 bilibili 的多元化探索与实践