「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类都能很好地满足我们的需求。


相关推荐
锅包肉的九珍1 分钟前
Scala图书管理系统
开发语言·后端·scala
SomeB1oody8 分钟前
【Rust自学】5.1. 定义并实例化struct
开发语言·后端·rust
云空30 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
青莳吖40 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall1 小时前
期末考学C
java·开发语言
重生之绝世牛码1 小时前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行1 小时前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm15761 小时前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明1 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
Monly211 小时前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat