前言
接触过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::Dirs
,QDir::Files
,QDir::Drives
存在其中之一,否则你无法得到任何实体。
dir->setFilter(QDir::AllEntries|QDir::Dirs|QDir::Files|QDir::Drives);
必须改为:
QDir dir = new QDir();
dir->setFilter(QDir::NoDotAndDotDot|QDir::AllEntries);
qDebug()<<dir->entryList();
才得到正确结果。
参考文献: