Qt中的文件及文件夹操作

本文档介绍了Qt中如何进行文件和文件夹的操作,主要包括使用QDir获取目录中的文件和目录名称列表、QFileInfo对象列表,以及如何设置筛选条件和递归查找。通过示例代码展示了获取当前目录下所有.h文件、获取文件名不带后缀以及获取绝对路径的方法。此外,还提到了QFileInfo类在获取文件详细信息时的作用。
摘要由CSDN通过智能技术生成

作为笔记整理,也方便以后查看。

Qt中涉及到文件与文件夹的主要有如下类(慢慢补充):

  • QDir:提供了访问系统目录结构及其内容的与平台无关的方式
  • QFile:提供从文件读取和写入文件的接口
  • QFileInfo:提供与系统无关的文件信息

1. 获取文件夹下的文件

获取文件夹或者文件,主要通过QDir类中的两个函数

  • //返回目录中所有文件和目录的名称列表
    QStringList QDir::entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
    
  • //返回该目录中所有文件和目录的QFileInfo对象列表
    QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
    

    两者都可以设置相应的筛选条件

1.1 获取目录中文件和目录的名称列表

1.1.1 不加任何筛选条件

QDir dir(QDir::currentPath());
qDebug()<<dir.entryList();

结果如下:

(".", "..", ".qmake.stash", "debug", "Makefile", "Makefile.Debug", "Makefile.Release", "release", "ui_mainwindow.h")

注意:其中有两个特殊项目:".", “…”,一般情况下要主动去掉,去掉的方式为在筛选器中加入QDir::NoDotAndDotDot

1.1.2 获取满足指定条件的信息

//只获取后缀为.h的文件
QDir dir(QDir::currentPath());
qDebug()<<dir.entryList(QStringList()<<"*.h", QDir::NoDotAndDotDot | QDir::Files);

1.1.3 使用递归获取文件夹下所有符合条件的文件,包括子文件夹

QStringList findFiles(QString objDir, QStringList filters)
{
    QStringList fileNames;
    QDir dir(objDir);

    //当前文件夹下的文件
    foreach (QString file, dir.entryList(filters, QDir::Files)) {
        fileNames.append(objDir + "/" + file);
    }

    //当前文件夹下的子文件夹
    foreach (QString subdir, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)) {
        fileNames.append(findFiles(objDir + "/" + subdir, filters));
    }

    return fileNames;
}


QStringList fileNames = findFiles("./", QStringList() << "*.h");

1.2 获取目录中所有文件和目录的QFileInfo对象列表、详细信息

QFileInfo类提供与系统无关的文件信息,在需要获取较详细或者特殊条件的文件信息时,QFileInfo就比较好用。比如判断文件是否存在,获取文件的绝对路径,获取文件的名称不带后缀等。

1.2.1 获取目录下所有文件的名字(不包括后缀)

QStringList getBaseNames(QString objDir)
{
    QStringList baseNames;
    QDir dir(objDir);
    foreach (QFileInfo info, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)) {
        baseNames.append(info.baseName());
    }

    return baseNames;
}

QStringList baseNames = getBaseNames("./");

1.2.2 获取目录下所有文件的绝对路径

QStringList getAbsoluteFilePath(QString objDir)
{
    QStringList absoluteFilePaths;
    QDir dir(objDir);
    foreach (QFileInfo info, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)) {
        absoluteFilePaths.append(info.absoluteFilePath());
    }

    return absoluteFilePaths;
}

QStringList absoluteFilePaths = getAbsoluteFilePath("./");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值