【跟我每天学习1个QT类】QDir类 — 操作文件和目录的强大工具的类

2024-04-15 23:44

本文主要是介绍【跟我每天学习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类 — 操作文件和目录的强大工具的类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907254

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命