Qt中的文件及文件夹操作

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

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("./");
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值