本文主要是介绍【跟我每天学习1个QT类】QDir类 — 操作文件和目录的强大工具的类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、QDir类简介
在Qt编程环境中,QDir类扮演着至关重要的角色,它作为Qt框架内对文件和目录进行操作的核心组件,为开发者提供了丰富的API来处理文件系统中的目录结构、文件搜索、路径管理等任务。QDir类设计为跨平台的,确保在Windows、Linux、macOS等各种操作系统上都能以统一的方式进行文件系统的交互。
二、成员变量
- ``d_ptr:私有实现指针,指向一个
QLibraryPrivate
对象,这是Qt为了实现跨平台特性而采用的PIMPL(Pointer to Implementation)设计模式的一部分,具体实现细节对用户隐藏。
三、公有成员函数
(1)构造函数
QDir(const QString &path = QString(), QObject *parent = nullptr)
:创建一个QDir实例,可指定初始路径(默认为空字符串),表示当前工作目录。可选地,可以传入一个父对象(用于Qt的对象树管理)。QDir(const QDir &dir, QObject *parent = nullptr)
:通过复制现有QDir对象来创建一个新的实例,继承其路径设置。
(2)路径设置与获取
[static] QFileInfoList QDir::drives()
:用于获取系统中所有可用磁盘驱动器(或称“驱动器”、“盘符”)的信息列表。static void QDir::addSearchPath(const QString &prefix, const QString &path)
:向Qt的全局搜索路径列表中添加一个自定义的路径前缀及其对应的路径。void setPath(const QString &path)
:设置QDir对象所代表的目录路径。QString path() const
:获取当前QDir对象所指向的目录路径。QString dirName() const
:用于获取与当前 QDir 对象关联的目录名称
(3)目录操作
static QString QDir::cleanPath(const QString &path)
:用于规范化并清理给定的文件或目录路径。bool mkdir(const QString &dirName)
:尝试在当前路径下创建一个子目录,返回true表示成功,false表示失败。bool rmdir(const QString &dirName)
:尝试删除指定的子目录(该目录必须为空),返回true表示成功,false表示失败。bool rename(const QString &oldName, const QString &newName)
:重命名当前路径下的文件或目录,返回true表示成功,false表示失败。bool remove(const QString &fileName)
:移除名为fileName的文件,成功则返回true;bool removeRecursively()
:删除目录,包括其所有内容。
如果成功返回true,否则返回false。
如果无法删除文件或目录,removerecursive()会继续执行并尝试删除尽可能多的文件和子目录,然后返回false。
如果目录已被删除,则该方法返回true(已达到预期结果)。
注意:此函数用于删除应用程序内部的小目录(如临时目录),而不是用户可见的目录。对于用户可见的操作,建议更精确地向用户报告错误,在出现错误时提供解决方案,在删除过程中显示进度,因为这可能需要几分钟,等等。void swap(QDir &other)
:将此QDir实例与其他QDir实例交换。这个函数非常快,从不出错。
(4)文件遍历与搜索
-
QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
:用于获取当前 QDir 对象所指目录中的文件和子目录列表。 -
uint count() const
:返回目录中目录和文件的总数。 -
QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
: -
QFileInfoList entryInfoList(QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort)
:返回当前目录下符合指定过滤器和排序规则的所有条目(包括文件和子目录)的信息列表。 -
QFileInfoList fileInfoList(const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort)
:返回当前目录下符合指定名称过滤器、一般过滤器和排序规则的文件信息列表。
(5)路径管理与转换
QString absoluteFilePath(const QString &fileName) const
:返回fileName的绝对路径QString absolutePath() const
:返回当前QDir对象的绝对路径。QString canonicalPath() const
:返回当前路径的规范形式,消除多余的“.”、“…”和符号链接。bool cd(const QString &dirName)
:用于改变当前QDir
对象所代表的目录位置。bool cdUp()
:改变当前QDir
对象所关联的目录至其父目录,并返回一个布尔值(bool
)以指示操作是否成功。相当于返回上一级目录。QString relativeFilePath(const QString &fileName) const
:计算相对于当前路径的给定文件名的相对路径。
QString filePath(const QString &fileName) const
:返回目录中一个文件的路径名称。此操作并不检查文件实际上是否存在于该目录中;如需进行存在性检查,请使用 exists() 函数。如果 QDir 对象表示的是相对路径,则返回的路径名称也将是相对的。fileName 中的冗余多重分隔符或 “.” 和 “…” 目录并不会被移除。[static] QString QDir::fromNativeSeparators(const QString &pathName)
:使用 ‘/’ 作为文件分隔符返回 pathName。例如,在 Windows 平台上fromNativeSeparators(“c:\winnt\system32”) 将返回 “c:/winnt/system32”。bool makeAbsolute()
:将当前目录转换为绝对路径,如果已经是绝对路径,就不用转换,如果转换成功,就返回true。QString relativeFilePath(const QString &fileName) const
:返回相对于目录的路径fileName。[static] QStringList QDir::searchPaths(const QString &prefix)
:返回前缀的搜索路径。
(6)属性查询与设置
QFile::Permissions permissions() const
:返回当前目录的权限。bool setPermissions(QFile::Permissions permissions)
:尝试设置当前目录的权限,返回true表示成功,false表示失败。bool QDir::isAbsolute() const
:如果目录路径是绝对的,则返回 true;否则返回 false。[static] bool QDir::isAbsolutePath(const QString &path)
:如果路径是绝对的,则返回 true;如果它是相对的,则返回 false。bool isReadable() const
:如果这个目录可以可读的,为true,否则为false;bool isRelative() const
:如果目录路径是相对的,则返回true;否则返回false。(在Unix下,如果不以“/”开头,则路径是相对的)。[static] bool QDir::isRelativePath(const QString &path)
:如果path是相对路径返回true;如果是绝对路径则返回false。[static] QChar QDir::listSeparator()
:返回本地路径列表分隔符:Unix下的’:‘和Windows下的’;’[static] bool QDir::match(const QString &filter, const QString &fileName)
:
如果fileName匹配过滤器列表中的任何通配符(glob)模式,则返回true;否则返回false。匹配不区分大小写。[static] QDir QDir::temp()
:返回系统的临时目录。[static] QString QDir::tempPath()
:返回系统临时目录的绝对规范路径。
在Unix/Linux系统上,这是TMPDIR环境变量中的路径,如果没有定义TMPDIR,则是/tmp。在Windows上,这通常是TEMP或TMP环境变量中的路径。此方法返回的路径不以目录分隔符结束,除非它是(驱动器的)根目录。
(7)其他辅助方法
-
bool exists(const QString &name) const
:返回 true 如果名为 name 的文件存在;否则返回 false。 -
bool exists() const
:检查当前路径是否存在且为有效目录。
-
bool isRoot() const
:判断当前路径是否为文件系统的根目录。 -
QDir root()
:返回代表文件系统根目录的QDir对象。 -
[static] QDir QDir::home()
:返回用户的主目录对应的QDir对象。 -
[static] QString QDir::homePath()
:用于获取当前用户的主目录(Home Directory)路径 -
[static] QDir current()
:返回当前工作目录对应的QDir对象。 -
[static] QString QDir::currentPath()
:获取并返回当前应用程序的工作目录 -
QDir temp()
:返回系统的临时文件目录对应的QDir对象。
三、枚举与类型定义
enum Filters
:定义了筛选目录条目的多种标准,如Dirs、Files、Hidden、Readable、Writable等。enum SortFlags
:定义了排序目录条目的依据,如Name、Time、Size、Reversed等。
四、类的应用
(1)文件系统导航
通过QDir,应用程序可以方便地在文件系统中切换、创建和删除目录,实现目录层次结构的遍历。
(2)文件查找与筛选
利用QDir的过滤器和排序功能,可以按名称、类型、时间戳等属性精确查找文件,支持批量操作和复杂条件组合。
(3)路径规范化与转换
QDir有助于处理相对路径与绝对路径之间的转换,确保路径表达的一致性和准确性,尤其在处理用户输入或跨平台移植时尤为重要。
(4)权限管理
QDir提供了查询和设置目录权限的方法,有助于确保应用程序对文件系统的访问遵循正确的安全策略。
(5)系统资源定位
QDir提供了一系列便捷方法获取系统关键目录,如用户主目录、当前工作目录、临时文件目录等,简化了与系统环境紧密相关的资源配置。
总之,QDir类是Qt应用程序进行文件系统操作的基础工具,无论是进行简单的目录导航、文件查找,还是复杂的文件管理任务,它都能提供高效、稳定且跨平台的支持。通过熟练运用QDir类,开发者可以有效地组织和操纵文件系统资源,提升应用程序的文件处理能力与用户体验。
这篇关于【跟我每天学习1个QT类】QDir类 — 操作文件和目录的强大工具的类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!