详解QDir类的使用

之前讲读写文件的文章,有涉及部分QDir的使用,讲解感觉不够全面,特此增加一篇。
QDir 是 Qt 框架中用于操作文件和目录的类,它提供了跨平台的文件系统访问接口,可以进行目录遍历、文件查找、创建、删除、移动等操作。以下是对 QDir 的详细使用说明及其 C++ 代码示例:

QDir 的主要功能与方法

  1. 目录操作

    • 创建目录mkdir()mkpath() 创建单级或多级目录。
    • 删除目录rmdir() 删除空目录,removeRecursively() 删除包含文件和子目录的非空目录。
    • 重命名或移动目录rename()
  2. 目录信息获取

    • 当前目录currentPath() 获取当前工作目录,setCurrent() 设置当前工作目录。
    • 目录属性exists()isReadable()isWritable()isAbsolute() 等方法检查目录的各种属性。
    • 目录内容entryList()entryInfoList() 获取目录内文件和子目录列表,可设置过滤条件和排序方式。
  3. 文件操作(与 QFile 类似,但基于目录上下文):

    • 文件查找entryList()entryInfoList()findFiles()findChildren() 查找特定文件或子目录。
    • 文件操作remove() 删除文件,rename() 重命名文件。
  4. 遍历目录

    • 迭代器:使用 QDirIterator 对目录进行深度优先或广度优先遍历。

QDir 使用 C++ 代码示例

#include <QDir>
#include <QFileInfo>
#include <QTextStream>
#include <QStandardPaths>
#include <QFile>
#include <QMessageBox>

int main(int argc, char *argv[]) {
    // 示例1:获取并打印当前工作目录
    QDir currentDir = QDir::current();
    qDebug() << "Current directory: " << currentDir.path();

    // 示例2:创建多级目录
    QString newDirPath = "/path/to/new/directory";
    if (QDir().mkpath(newDirPath)) {
        qDebug() << "Directory created: " << newDirPath;
    } else {
        qDebug() << "Failed to create directory!";
    }

    // 示例3:列出指定目录下的所有文件和子目录(不递归)
    QDir dir("/path/to/some/directory");
    QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
    foreach (const QString &entry, entries) {
        qDebug() << entry;
    }

    // 示例4:按大小排序列出目录下的所有文件,并显示详细信息
    QDir dirWithDetails("/path/to/some/directory");
    dirWithDetails.setSorting(QDir::Size | QDir::Reversed);
    QFileInfoList fileInfoList = dirWithDetails.entryInfoList(QDir::Files);
    foreach (const QFileInfo &info, fileInfoList) {
        qDebug() << "Name: " << info.fileName();
        qDebug() << "Size: " << info.size();
        qDebug() << "IsDir: " << info.isDir();
        qDebug() << "Last modified: " << info.lastModified().toString();
        qDebug() << "";
    }

    // 示例5:在用户文档目录下创建一个新文件并写入文本
    QString userDocsPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
    QFile newFile(userDocsPath + "/example.txt");
    if (newFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        QTextStream out(&newFile);
        out << "This is an example text written to a file in the Documents folder.";
        newFile.close();
        QMessageBox::information(nullptr, "File Created", "Example file was successfully created.");
    } else {
        QMessageBox::critical(nullptr, "Error", "Failed to create or write to the example file.");
    }

    return 0;
}

以上代码示例包含了以下几个 QDir 使用场景:

  • 获取并打印当前工作目录。
  • 创建多级目录。
  • 列出指定目录下的所有文件和子目录(不递归)。
  • 按大小排序列出目录下的所有文件,并显示详细信息。
  • 在用户文档目录下创建一个新文件并写入文本。

这些示例涵盖了 QDir 类的基本操作,包括目录创建、查询、文件操作等。在实际项目中,您可以根据具体需求灵活运用 QDir 提供的各种方法进行文件系统操作。如果需要更复杂的功能,如深度优先或广度优先遍历目录树,可以结合使用 QDirIterator 类。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值