Qt学习笔记#7: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);

得到所有的文件信息

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章