Qt学习笔记:QDir

前言

接触过DOS系统的同学就知道,dir命令就是浏览当前目录下的所有文件及文件夹,和linux下面的ls命令类似。

顾名思义,QDir类就是用来访问系统目录结构的一个类。

关于QDir类的具体用法,官方文档讲得非常清楚,这里就不详细介绍,本文主要记录作者觉得值得重点介绍的函数方法。


获取当前文件目录

获取当前**程序**所在的目录。

[static] QString QDir::currentPath()

获取当前**可执行文件**所在的目录。

[static] QString QCoreApplication::applicationDirPath()

注意两者的区别,第一中可以理解为取得当前项目所在的目录,第二个则直接得到exe文件(在window系统中)所在的位置。


获取当前文件的父目录

bool QDir::cdUp()

QDir *dir = new QDir(filepath);
dir->cdUp()
QString path = dir->absolutePath();

或者也可以

QDir *dir = new QDir(filepath);
QString name = dir->dirName();
filepath.remove(name);

得到所有的文件信息

返回一个字符串列表,里面保存了该目录下所有文件及文件夹的名字。

扫描二维码关注公众号,回复: 9952473 查看本文章

QStringList QDir::entryList()

返回一个QFileInfoList,里面保存了该目录下所有文件及文件夹的信息。

QFileInfoList QDir::entryInfoList()

这两个方法都可以配合下面三种方法使用:

void QDir::setNameFilters(const QStringList &nameFilters)
void QDir::setSorting(SortFlags sort)
void QDir::setFilter(Filters filters)

过滤掉多余目录

默认情况下,得到的所有文件及文件夹名字一定包括这两个目录

/.
/..

如果我们想过滤掉这两个目录,那我们需要

setFilter(Filters filters)

举例:

QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot);
qDebug()<<dir->entryList();

显示结果为空,原因filter的默认值是QDir::AllEntries
如果你重新设定了filters,那么你至少要保证QDir::DirsQDir::FilesQDir::Drives存在其中之一,否则你无法得到任何实体。

dir->setFilter(QDir::AllEntries|QDir::Dirs|QDir::Files|QDir::Drives);

必须改为:

QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot|QDir::AllEntries);
qDebug()<<dir->entryList();

才得到正确结果。


参考文献:

http://doc.qt.io/qt-5/qdir.html

发布了45 篇原创文章 · 获赞 46 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/founderznd/article/details/52593414
今日推荐