qdir 自动创建多级目录_QDir 类 - 目录信息类

QDir是Qt中的目录信息类,用于获取和操作目录信息。本文详细介绍了QDir的初始化、目录信息、操作目录、程序目录和特殊目录、路径相关功能,包括创建、删除、重命名目录,设置名称和类型过滤,以及路径转换等。同时,还涵盖了QDir的相关静态函数,如搜索路径管理和分隔符处理。

本文结构如下:概述

函数详解初始化

目录信息

操作目录

程序目录和特殊目录

路径相关

所有函数

概述

我们知道 QFileInfo 类是文件信息类,其用法参考《QFileInfo 类 - 文件信息类》。那么本文讲解目录信息类 QDir,用于获取有关目录的信息

函数详解

初始化

构造函数

QDir(const QDir &dir)

QDir(const QString &path = QString())

QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

指定目录

QString path() const

void setPath(const QString &path)

指定名称过滤器

QStringList nameFilters() const

void setNameFilters(const QStringList &nameFilters)

指定排序

QDir::SortFlags sorting() const

void setSorting(QDir::SortFlags sort)

指定类型过滤器

QDir::Filters filter() const

void setFilter(QDir::Filters filters)

[static]bool match(const QString &filter, const QString &fileName)

[static]bool match(const QStringList &filters, const QString &fileName)

要了解 QDir 类,首先肯定是这个类的构建方法。一般就是把目录地址传给构造函数即可,但这里我们来讲下第三个构造函数中各参数的意义。一共4各参数,分别为 path(路径信息)、nameFilter(名称过滤)、sort(排序规则)、filters(类型过滤)。

关于名称过滤,首先要知道生活中我们用过滤和屏蔽来筛选结果,而设置了过滤就意味着谁能通过。既然 QDir 类是目录信息类,那我肯定要知道该目录下有哪些文件、文件夹,所以在这里设置好后在调用 entryList()、entryInfoList() 时就会只显示你设置的过滤词。例如我设置了“*.cpp”".h",那么调用 entryList() 后只返回扩展名为 cpp 和 h 的文件,其他都不显示。

关于排序规则,也是指定了返回目录信息的先后顺序,有的按名称排序,有的按时间排序,具体排序规则参看下图。可以组合起来用。

关于类型过滤,作用和名称过滤是类似的,只不过是按照类型来过滤,具体类型如下图。

关于 match(),两个静态函数可以判断 fileName 是否符合 filter 规则,其中 filter 是通配符表达式

目录信息

目录名称

QString dirName() const

是否存在

bool exists() const

bool exists(const QString &name) const

判断

bool isAbsolute() const

[static]bool isAbsolutePath(const QString &path)

bool isRelative() const

[static]bool isRelativePath(const QString &path)

bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const

bool isRoot() const

bool isReadable() const

目录内容

uint count() const

QStringList entryList(......) const

QFileInfoList entryInfoList(...) const

目录中的文件路径

QString filePath(const QString &fileName) const

QString absoluteFilePath(const QString &fileName) const

QString relativeFilePath(const QString &fileName) const

关于 dirName(),就是返回目录的名称,比如 QDir("/home/project"),那么返回值就是“project”。

关于 isAbsolute() 和 isAbsolutePath(),这两个函数的效果是一样的,区别在于是否是静态函数。同理,isRelative() 和 isRelativePath() 也是一样的。

关于 isEmpty(),就是判断目录中是否有文件或者文件夹。当然在 Linux 系统中,任何一个目录都是有‘.’和‘..’的,所以根据需要设定好 filters。

操作目录

创建

bool mkdir(const QString &dirName) const

bool mkpath(const QString &dirPath) const

重命名

bool rename(const QString &oldName, const QString &newName)

删除

删除目录:bool rmdir(const QString &dirName) const

删除路径:bool rmpath(const QString &dirPath) const

删除文件:bool remove(const QString &fileName)

全部删除:bool removeRecursively()

更改

bool cd(const QString &dirName)

bool cdUp()

关于创建目录,mkdir() 就直接在执行程序所在目录中创建一个子目录,只有一个哦。而 mkpath() 创建的目录,其父目录们也会被创建。举个例子,我要在当前目录下创建一个 folderA 目录,在 其中再创建一个 folderB 目录。如果用 mkdir() 就需要写两遍,而用 mkpath() 只需要执行 mkpath("folderA/folderB") 即可。

程序目录和特殊目录

程序目录

[static]QDir current()

[static]QString currentPath()

[static]bool setCurrent(const QString &path)

特殊目录

系统根目录列表

[static]QFileInfoList drives()

根目录

根目录:[static]QDir root()

根路径:[static]QString rootPath()

临时目录

[static]QDir temp()

[static]QString tempPath()

系统主目录

[static]QDir home()

[static]QString homePath()

关于程序目录,三个函数都是获取可执行程序所在的目录,而不是 QDir 中的目录。

关于 drives(),这个静态函数可了不得,能获得电脑里所有的盘符,比如“C:\”、“D:\”。Linux 只会返回个“/”。

路径相关

绝对路径:QString absolutePath() const

转成绝对路径:bool makeAbsolute()

规范路径:QString canonicalPath() const

搜索前缀功能

获取:[static]QStringList searchPaths(const QString &prefix)

增加:[static]void addSearchPath(const QString &prefix, const QString &path)

设置:void setSearchPaths(const QString &prefix, const QStringList &searchPaths)

分隔符

[static]QChar separator()

[static]QChar listSeparator()

[static]QString toNativeSeparators(const QString &pathName)

[static]QString fromNativeSeparators(const QString &pathName)

清除前缀路径:[static]QString cleanPath(const QString &path)

关于“搜索前缀”功能,自从 Qt 4.3 引入以来,我相信用这个功能的人是极少的。这个功能其实很强大,它是干吗用的呢?这样说吧,假如某个类型的文件都在一个目录存放,而这个目录的绝对路径特别长,此时用“搜索前缀”功能就会方便很多。举个例子,QDir::setSearchPaths("doc", "c:/My Documents"),这样的一句话表明“c:/My Documents”可以用“doc”来替换。那么我要用的时候可以这样:QFile file("docs:test.txt"),展开来就是“c:/My Documents/test.txt”。

关于分隔符,我们知道 Windows 下是‘\’而 Linux 下是‘/’,separator() 就是用来返回分隔符用的。listSeparator() 同样在 Windows 下是‘;’而 Linux 下是‘:’。剩下的 toNativeSeparators() 和 fromNativeSeparators() 两个函数也是处理分隔符的,我们的 Qt 在写路径的时候统一用‘/’,但想转成 Windows 下的‘\’就可以用 to.... 函数

void Q_CLEANUP_RESOURCE(name)

void Q_INIT_RESOURCE(name)

有人很好奇,为啥资源系统相关的宏会在 QDir 里出现,其实这和上文的“搜索前缀”功能类似。因为我们用 Qt 资源系统时都是“:/image/main.png”这种样子的,它既不是绝对路径也不是相对路径。但是‘:/’就可以在资源文件中搜索到我们需要的图片。

关于 Q_INIT_RESOURCE(),就是将 .qrc 文件添加到搜索路径中。调用该宏后,一般程序启动会自动加载 .qrc 文件,但对于静态库中的资源,需要手动写上该宏。例如资源文件叫 myapp.qrc,那么使用宏就是 Q_INIT_RESOURCE(myapp)。

关于 Q_CLEANUP_RESOURCE(),程序结束后自动卸载资源文件,但养成好习惯,程序结束前调用该宏可以保证某些平台的正常运行。

所有函数初始化构造函数QDir(const QDir &dir)

QDir(const QString &path = QString())

QDir(const QString &path, const QString &nameFilter, QDir::SortFlags sort = SortFlags(Name | IgnoreCase), QDir::Filters filters = AllEntries)

指定目录QString path() const

void setPath(const QString &path)

指定名称过滤器QStringList nameFilters() const

void setNameFilters(const QStringList &nameFilters)

指定排序QDir::SortFlags sorting() const

void setSorting(QDir::SortFlags sort)

指定类型过滤器QDir::Filters filter() const

void setFilter(QDir::Filters filters)

[static]bool match(const QString &filter, const QString &fileName)

[static]bool match(const QStringList &filters, const QString &fileName)

目录信息目录名称QString dirName() const

是否存在bool exists() const

bool exists(const QString &name) const

判断bool isAbsolute() const

[static]bool isAbsolutePath(const QString &path)

bool isRelative() const

[static]bool isRelativePath(const QString &path)

bool isEmpty(QDir::Filters filters = Filters(AllEntries | NoDotAndDotDot)) const

bool isRoot() const

bool isReadable() const

目录内容uint count() const

QStringList entryList(......) const

QFileInfoList entryInfoList(...) const

目录中的文件路径QString filePath(const QString &fileName) const

QString absoluteFilePath(const QString &fileName) const

QString relativeFilePath(const QString &fileName) const

操作目录创建bool mkdir(const QString &dirName) const

bool mkpath(const QString &dirPath) const

重命名bool rename(const QString &oldName, const QString &newName)

删除删除目录:bool rmdir(const QString &dirName) const

删除路径:bool rmpath(const QString &dirPath) const

删除文件:bool remove(const QString &fileName)

全部删除:bool removeRecursively()

更改bool cd(const QString &dirName)

bool cdUp()

程序目录和特殊目录程序目录[static]QDir current()

[static]QString currentPath()

[static]bool setCurrent(const QString &path)

特殊目录系统根目录列表[static]QFileInfoList drives()

根目录根目录:[static]QDir root()

根路径:[static]QString rootPath()

临时目录[static]QDir temp()

[static]QString tempPath()

系统主目录[static]QDir home()

[static]QString homePath()

路径相关绝对路径:QString absolutePath() const

转成绝对路径:bool makeAbsolute()

规范路径:QString canonicalPath() const

搜索前缀功能获取:[static]QStringList searchPaths(const QString &prefix)

增加:[static]void addSearchPath(const QString &prefix, const QString &path)

设置:void setSearchPaths(const QString &prefix, const QStringList &searchPaths)

分隔符[static]QChar separator()

[static]QChar listSeparator()

[static]QString toNativeSeparators(const QString &pathName)

[static]QString fromNativeSeparators(const QString &pathName)

清除前缀路径:[static]QString cleanPath(const QString &path)

其他交换:void swap(QDir &other)

刷新:void refresh() const

宏void Q_CLEANUP_RESOURCE(name)

void Q_INIT_RESOURCE(name)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值