「QT」文件类 之 QDir 目录类

✨博客主页
何曾参静谧的博客
「QT」QT5程序设计
「Win」Windows程序设计 「IDE」集成开发环境 「UG/NX」BlockUI集合
「C/C++」C/C++程序设计 「DSA」数据结构与算法 「UG/NX」NX二次开发
「QT」QT5程序设计 「File」数据文件格式 「UG/NX」NX定制开发
「Py」Python程序设计 「Math」探秘数学世界 「PK」Parasolid函数说明

目录

QDir类在Qt 5.15中的详细介绍

一、引言

QDir类是Qt框架中的一个核心类,它提供了对文件系统目录的操作接口。Qt是一个跨平台的应用程序开发框架,广泛用于开发桌面、移动和嵌入式设备上的应用程序。QDir类使得开发者能够方便地在不同操作系统上处理目录和文件,如进行目录遍历、文件查找、创建、删除、移动等操作。

二、使用范围

QDir类用于操作路径名,获取关于目录路径及文件的相关信息。它既可以用于访问文件系统,也可以用于访问Qt的资源系统。QDir可以指向一个用相对路径或绝对路径指明的文件,并支持多种过滤和排序功能,以满足不同的目录和文件操作需求。

三、类的头文件

QDir类的头文件是<QDir>。在使用QDir类之前,需要包含这个头文件。

cpp 复制代码
#include <QDir>

四、类的注意事项

  1. 当调用QDir的相关方法(例如rename(), removeRecursively())时,需要注意:

    • 操作文件时不应当在传入参数后加上"/"。
    • 操作文件夹时要在传入参数后面加入"/"。
  2. QDir的路径分隔符:

    • Qt使用"/"作为通用目录分隔符。
    • 在Windows上,QDir会将路径转换为符合底层操作系统的格式。

五、类的继承

QDir类不继承任何类,也没有子类。但是,它内部使用了私有类QDirPrivate来管理其内部数据和状态。

六、类的构造介绍

QDir类有多个构造函数,可以接收不同的参数来初始化对象。

  • QDir():构造一个指向当前工作目录的QDir对象。
  • QDir(const QString &path):构造一个指向指定路径的QDir对象。
  • QDir(const QDir &other):复制构造函数,构造一个与另一个QDir对象相同的QDir对象。

七、公有函数介绍

QDir类提供了丰富的公有函数,用于操作目录和文件。以下是一些常用的公有函数:

  • bool exists() const:检查目录是否存在。
  • QString path() const:返回目录的路径。
  • void setPath(const QString &path):设置目录的路径。
  • QString absolutePath() const:返回目录的绝对路径。
  • QString dirName() const:返回目录名。
  • bool cd(const QString &dirName):改变当前目录到指定的子目录。
  • bool cdUp():改变当前目录到父目录。
  • bool mkdir(const QString &dirName) const:创建目录。
  • bool rmdir(const QString &dirName) const:删除目录,目录必须为空。
  • QStringList entryList(Filters filters = NoDotAndDotDot | AllDirs | AllFiles, SortFlags sort = NoSort) const:返回目录中的文件和目录列表。
  • QFileInfoList entryInfoList(Filters filters = NoDotAndDotDot | AllDirs | AllFiles, SortFlags sort = NoSort) const:返回目录中的文件和目录的详细信息列表。

八、Static函数介绍

QDir类还提供了一些静态函数,用于获取系统路径或进行路径转换。

  • QDir current():返回指向当前工作目录的QDir对象。
  • QString currentPath():返回当前工作目录的路径。
  • QDir home():返回指向用户主目录的QDir对象。
  • QString homePath():返回用户主目录的路径。
  • QDir root():返回指向根目录的QDir对象。
  • QString rootPath():返回根目录的路径。
  • QDir temp():返回指向系统临时目录的QDir对象。
  • QString tempPath():返回系统临时目录的路径。
  • QString cleanPath(const QString &path):返回目录分隔符标准化的路径。
  • QString fromNativeSeparators(const QString &pathName):将路径中的本机分隔符转换为"/"。

九、运算符重载

QDir类没有重载任何运算符。

十、详细代码举例

以下是一个使用QDir类的示例代码,用于列出指定目录下的所有文件,并按文件大小从小到大排序。

cpp 复制代码
#include <QCoreApplication>
#include <QDir>
#include <QFileInfoList>
#include <QFileInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建一个 QDir 对象,指向当前工作目录
    QDir dir;

    // 打印当前工作目录
    qDebug() << "Current Directory:" << dir.absolutePath();

    // 改变当前目录到指定的路径(假设这个路径存在)
    // dir.setPath("/path/to/your/directory");

    // 列出目录中的所有条目(文件和子目录)
    QFileInfoList fileList = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Files);

    // 遍历文件列表
    for (const QFileInfo &fileInfo : fileList) {
        // 判断是文件还是目录
        if (fileInfo.isFile()) {
            qDebug() << "File:" << fileInfo.absoluteFilePath();
        } else if (fileInfo.isDir()) {
            qDebug() << "Directory:" << fileInfo.absoluteFilePath();
        }

        // 获取文件的详细信息,如大小、创建时间等
        qDebug() << "  Size:" << fileInfo.size();
        qDebug() << "  Created:" << fileInfo.created();
        qDebug() << "  Last Modified:" << fileInfo.lastModified();
    }

    // 创建一个新的子目录
    QString newDirName = "NewSubDirectory";
    if (dir.mkpath(newDirName)) {
        qDebug() << "Directory created:" << dir.absoluteFilePath(newDirName);
    } else {
        qDebug() << "Failed to create directory:" << newDirName;
    }

    // 重命名目录(假设新目录已经存在)
    QString oldDirName = newDirName;
    QString newDirNameRenamed = "RenamedSubDirectory";
    if (dir.rename(oldDirName, newDirNameRenamed)) {
        qDebug() << "Directory renamed from" << oldDirName << "to" << newDirNameRenamed;
    } else {
        qDebug() << "Failed to rename directory from" << oldDirName;
    }

    // 删除目录(及其内容,如果设置为递归删除)
    if (dir.rmdir(newDirNameRenamed) || dir.removeRecursively(newDirNameRenamed)) {
        qDebug() << "Directory removed:" << newDirNameRenamed;
    } else {
        qDebug() << "Failed to remove directory:" << newDirNameRenamed;
    }

    return a.exec();
}

在这个示例中,我们首先创建了一个QDir对象,指向指定的目录。然后,我们设置了过滤器来只列出文件,并设置了排序方式为按文件大小排序。最后,我们通过调用entryInfoList()函数获取了目录中的文件信息列表,并遍历这个列表来打印每个文件的文件名和大小。

通过以上介绍,我们可以看到QDir类在Qt框架中是一个非常强大且灵活的类,它提供了丰富的功能来操作目录和文件。无论是进行简单的目录遍历还是复杂的文件查找和排序,QDir类都能很好地满足我们的需求。


相关推荐
一丝晨光20 分钟前
gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
c语言·开发语言·c++·gnu·clang·gcc·g++
南城花随雪。31 分钟前
Spring框架之装饰者模式 (Decorator Pattern)
java·开发语言·装饰器模式
究极无敌暴龙战神X36 分钟前
前端学习之ES6+
开发语言·javascript·ecmascript
虞书欣的642 分钟前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
FHYAAAX1 小时前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
汉克老师1 小时前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节
爱吃生蚝的于勒2 小时前
C语言最简单的扫雷实现(解析加原码)
c语言·开发语言·学习·计算机网络·算法·游戏程序·关卡设计
Ai 编码助手2 小时前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
姆路2 小时前
QT中使用图表之QChart绘制动态折线图
c++·qt
hummhumm2 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang