QDir 类提供对目录结构及其内容的访问,QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统,它也可以用来访问Qt的资源系统。
Qt使用“/”作为通用目录分隔符,就像URL中的“/”用作路径分隔符一样。如果您始终使用“/”作为目录分隔符,Qt将翻译您的路径以符合底层操作系统。QDir 可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(可以选择在 Windows 下以驱动器规范开头)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
注意:以冒号 (:) 开头的路径始终被认为是绝对的,因为它们表示QResurce
构造函数:
常用函数:
absoluteFilePath() | 返回目录中文件的绝对路径名。不检查目录中是否确实存在该文件 |
absolutePath() | 返回绝对路径 |
addSearchPath() | 将路径添加到前缀的搜索路径 |
canonicalPath() | 返回规范路径,即没有符号链接或冗余 “.” 或 “..” 元素的路径 |
cd() | 修改目录名 |
cdUp() | 上移一个目录 |
clearPath() | 返回规范化目录分隔符的路径 |
count() | 返回该目录中目录和文件的个数 |
current() | 返回当前目录 |
currentPath() | 返回当前目录的绝对路径 |
dirName() | 返回目录名称 |
drives() | 返回此系统上根目录的列表 |
entryInfoList() | 返回目录中所有文件和目录的QFileInfo对象列表 |
entryList() | 返回目录中所有文件和目录的名称列表 |
exist() | 判断目录是否存在 |
filePath() | 返回目录文件中的路径名 |
fromNativeSeparators (QString) | 把路径转换为以'/'作为分割符的路径 |
home() | 返回用户的主目录 |
homePath() | 返回用户主目录的绝对路径 |
isEmpty() | 目录是否为空 |
isRoot() | 是否为根目录 |
makeAbsolute() | 把路径转化为绝对路径 |
mkdir() | 创建一个子目录 |
rmdir() | 删除空目录 |
path() | 返回路径,这可能包含符号链接 |
refresh() | 刷新 |
remove() | 删除文件 |
removeRecursively() | 删除目录,删除里面的所有内容 |
root() | 返回根目录 |
rootPath() | 返回根目录路径 |
temp() | 返回临时目录 |
设置函数:
setCurrent(QString &path) | 将应用程序的当前工作目录设置为path |
setFilter() | 设置筛选器 |
setNameFilters(QStringList nameFilters) | 设置多个筛选 |
setSoring() | 设置排序顺序 |
QDir::Filters(过滤器)
QDir::Dirs | 列出与筛选器匹配的目录 |
QDir::AllDirs | 列出所有目录;即不要将过滤器应用于目录名称 |
QDir::Files | 列出文件 |
QDir::Drives | 列出磁盘驱动器 |
QDir::NoSymLinks | 不要列出符号链接 |
QDir::NoDotAndDotDot | 不要列出特殊条目“.”和“..” |
QDir::NoDot | 不要列出特殊条目“.” |
QDir::NoDotDot | 不要列出特殊条目“..” |
QDir::AllEntries | 列出目录、文件、驱动器和符号链接 |
QDir::Readable QDir::Writable | 列出应用程序具有读取访问权限的文件 列出应用程序具有写入访问权限的文件 需要目录和文件配合使用 |
QDir::Executable | 列出应用程序具有执行访问权限的文件。可执行文件值需要与目录或文件结合使用。 |
QDir::Modified | 仅列出已修改的文件 |
QDir::Hidden | 列出隐藏文件 |
QDir::System | 列出系统文件 |
QDir::CaseSensitive | 筛选器应区分大小写 |
QDir::SortFlags(排序方式)
QDir::Name | 按名称排序 |
QDir::Time | 按时间(修改时间)排序 |
QDir::Size | 按文件大小排序 |
QDir::Type | 按文件类型(扩展名)排序 |
QDir::Unsorted | 不要排序 |
QDir::NoSort | 默认情况下不排序 |
QDir::DirsFirst | 首先放置目录,然后放置文件 |
QDir::DirsLast | 首先放置文件,然后放置目录 |
QDir::Reversed | 反转排序顺序 |
QDir::IgnoreCase | 排序不区分大小写 |
QDir::LocaleAware | 使用当前区域设置对项目进行适当排序 |
目录的原样:
目录属性:
QDir dir("F:/text2");
qDebug()<<"目录的绝对路径"<<dir.absolutePath();
qDebug()<<"目录的规范路径"<<dir.canonicalPath();
qDebug()<<"目录的文件和目录个数"<<dir.count();
qDebug()<<"当前目录"<<dir.current();
qDebug()<<"当前目录路径"<<dir.currentPath();
qDebug()<<"返回主目录"<<dir.home();
qDebug()<<"返回主目录路径"<<dir.homePath();
qDebug()<<"修改目录名"<<dir.cd("text222");
qDebug()<<"上移一个目录"<<dir.cdUp();
qDebug()<<"目录的当前的绝对路径"<<dir.absolutePath();
获取整个目录内容:
QDir dir("F:/text2");
QListWidget *listwidget=new QListWidget(this);//创建一个列表控件
listwidget->setFixedSize(200,800);//设置大小
QStringList slist=dir.entryList();//获取目录里的内容
listwidget->addItems(slist);//添加目录里面的内容
使用过滤器:
entryList函数:
使用函数:
使用dir.entryList()
- 使用setFilter()
1.仅过滤掉隐藏文件
只过滤隐藏文件的话,需要使用dir.entryList(dir.filter()|QDir::NoDotAndDotDot);
使用 entryList()
注意:只过滤隐藏文件 不可以直接使用
QStringList slist=dir.entryList(QDir::NoDotAndDotDot);//错误
需要使用
QStringList slist=dir.entryList(dir.filter()|QDir::NoDotAndDotDot);//正确
使用 setFilter()
//dir.setFilter(QDir::NoDotAndDotDot);//错误
dir.setFilter(dir.filter()|QDir::NoDotAndDotDot);//正确
QStringList slist=dir.entryList();
2.设置多个过滤条件
设置多个条件的话就可以不使用dir.filter()|QDir::NoDotAndDotDot
获取目录中的文件夹:
使用 entryList()
QStringList slist=dir.entryList(QDir::NoDotAndDotDot|QDir::Dirs);
使用 setFilter()
dir.setFilter(QDir::NoDotAndDotDot|QDir::Dirs);
QStringList slist=dir.entryList();
获取目录中的文件:
使用 entryList()
QStringList slist=dir.entryList(QDir::NoDotAndDotDot|QDir::Files);
使用 setFilter()
dir.setFilter(QDir::NoDotAndDotDot|QDir::Files);
QStringList slist=dir.entryList();
设置多个筛选
使用:setNameFilters(QStringList nameFilters)可以细致的筛选文件,筛选多个文件后缀名
QDir dir("F:/text2");
QListWidget *listwidget=new QListWidget(this);//创建一个列表控件
listwidget->setFixedSize(200,800);//设置大小
QStringList filterlist;
filterlist<<"*.dll"<<"*txt";//筛选以dll和txt结尾的文件
dir.setNameFilters(filterlist);//设置筛选
QStringList slist=dir.entryList(dir.filter()|QDir::NoDotAndDotDot);
listwidget->addItems(slist);//添加目录里面的文件
两个筛选一起使用:
QDir dir("F:/text2");
QListWidget *listwidget=new QListWidget(this);//创建一个列表控件
listwidget->setFixedSize(200,800);//设置大小
QStringList filterlist;
filterlist<<"*.dll"<<"*txt";//筛选以dll和txt结尾的文件
QStringList slist=dir.entryList(filterlist,dir.filter()|QDir::NoDotAndDotDot);
listwidget->addItems(slist);//添加目录里面的文件
使用排序器:
QDir::SortFlagssort= NoSort
- 使用entryList()进行设置
- 使用setSorting()进行设置
按照大小进行排序:
entryList()进行设置
QStringList slist=dir.entryList(dir.filter(),QDir::Size);
setSorting()进行设置
dir.setSorting(QDir::Size);
QStringList slist=dir.entryList();
使用:下面的函数可以把以上三个功能一起使用
entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
也可以直接获得文件信息列表:
entryInfoList(const QStringList &nameFilters, QDir::Filtersfilters= NoFilter, QDir::SortFlagssort= NoSort) const
entryInfoList(QDir::Filtersfilters= NoFilter, QDir::SortFlagssort= NoSort) const