QT 获取指定目录所有文件 或 子目录,获取每个文件的相关信息 的接口讲解

例子

QString exeDir = qApp->applicationDirPath() + "/packages"; //bin/Debug/debug/packages
QDir dir(exeDir);
QFileInfoList Info_list = dir.entryInfoList(QDir::Files);

在这段代码中,QDir::entryInfoList(QDir::Files)QDir 类的成员函数,用于获取指定目录下的文件信息列表(QFileInfoList)。

  1. 首先,我们创建了一个 QDir 对象 dir,表示要获取文件信息的目录。你可以在构造函数中指定目录的路径,或者在之后使用 setPath() 方法设置目录路径。

  2. 然后,我们调用 entryInfoList() 方法,传入 QDir::Files 参数,表示我们只希望获取目录中的文件信息,而不包括子目录。

  3. entryInfoList() 方法返回一个 QFileInfoList 类型的对象 Info_list,其中包含了目录中所有文件的信息。

QFileInfoList 是一个 QList 类型的容器,用于存储 QFileInfo 类的对象,每个 QFileInfo 对象包含了一个文件的相关信息,例如文件名、大小、修改时间等。

在获取到 Info_list 后,你可以使用 foreach 循环或迭代器遍历列表,访问每个文件的信息。例如:

QDir dir("C:/MyFiles"); // 指定目录路径
QFileInfoList Info_list = dir.entryInfoList(QDir::Files); // 获取文件信息列表

// 遍历文件信息列表
foreach (const QFileInfo& fileInfo, Info_list) {
    qDebug() << "File Name:" << fileInfo.fileName();
    qDebug() << "File Size:" << fileInfo.size() << "bytes";
    qDebug() << "Last Modified:" << fileInfo.lastModified().toString();
    // 其他文件信息...
}

上述代码将遍历目录 “C:/MyFiles” 下的所有文件,输出每个文件的名称、大小和最后修改时间等信息。

请注意,在实际应用中,你可能需要先判断目录是否存在,以及对可能出现的异常情况进行适当的处理。

相关接口的补充

QFileInfo 类提供了许多接口用于获取文件的各种属性和信息。以下是一些常用的接口:

  1. 文件路径和名称相关接口:

    • fileName():返回文件名(包含文件后缀)。
    • filePath():返回文件路径和文件名(包含文件后缀)。
    • absoluteFilePath():返回文件的绝对路径和文件名(包含文件后缀)。
    • baseName():返回文件名(不包含文件后缀)。
    • suffix():返回文件后缀。
  2. 文件大小和类型相关接口:

    • size():返回文件大小(字节数)。
    • isFile():判断是否是文件。
    • isDir():判断是否是目录。
    • isSymLink():判断是否是符号链接(软链接)。
  3. 文件权限和时间相关接口:

    • isReadable():判断文件是否可读。
    • isWritable():判断文件是否可写。
    • isExecutable():判断文件是否可执行。
    • owner():返回文件所有者的用户名。
    • group():返回文件所属组的组名。
    • lastModified():返回文件的最后修改时间。
    • lastRead():返回文件的最后访问时间。
  4. 文件路径和目录相关接口:

    • dir():返回文件所在的目录。
    • absoluteDir():返回文件所在的绝对目录。

在使用这些接口时,需要注意文件是否存在,避免在文件不存在的情况下调用这些接口可能导致的异常。

下面是一个示例代码,展示如何使用一些常用的 QFileInfo 接口:

#include <QFileInfo>
#include <QDebug>

int main()
{
    QFileInfo fileInfo("C:/MyFiles/example.txt"); // 指定文件路径
    if (fileInfo.exists()) {
        qDebug() << "File Name:" << fileInfo.fileName();
        qDebug() << "File Path:" << fileInfo.filePath();
        qDebug() << "File Absolute Path:" << fileInfo.absoluteFilePath();
        qDebug() << "File Base Name:" << fileInfo.baseName();
        qDebug() << "File Suffix:" << fileInfo.suffix();
        qDebug() << "File Size:" << fileInfo.size() << "bytes";
        qDebug() << "Is File:" << fileInfo.isFile();
        qDebug() << "Is Directory:" << fileInfo.isDir();
        qDebug() << "Is Symbolic Link:" << fileInfo.isSymLink();
        qDebug() << "Is Readable:" << fileInfo.isReadable();
        qDebug() << "Is Writable:" << fileInfo.isWritable();
        qDebug() << "Is Executable:" << fileInfo.isExecutable();
        qDebug() << "Owner:" << fileInfo.owner();
        qDebug() << "Group:" << fileInfo.group();
        qDebug() << "Last Modified:" << fileInfo.lastModified().toString();
        qDebug() << "Last Read:" << fileInfo.lastRead().toString();
        qDebug() << "File Directory:" << fileInfo.dir().path();
        qDebug() << "File Absolute Directory:" << fileInfo.absoluteDir().path();
    } else {
        qDebug() << "File does not exist.";
    }

    return 0;
}

在上述示例中,我们创建了一个 QFileInfo 对象 fileInfo,指定了文件 “C:/MyFiles/example.txt” 的路径。然后,使用不同的接口获取了该文件的各种属性和信息,并进行输出。

参数 补充

entryInfoList()QDir 类的成员函数,用于获取指定目录下的文件信息列表。它可以接受一个可选的 QDir::Filters 参数,用于过滤要获取的文件信息类型。QDir::Filters 是一个位标志枚举,可以使用按位或(|)运算符将多个选项组合起来。

以下是一些常用的 QDir::Filters 参数:

  1. QDir::NoFilter:不过滤,获取目录下的所有文件和目录信息(默认值)。
  2. QDir::Dirs:仅获取目录信息,不包括文件。
  3. QDir::Files:仅获取文件信息,不包括目录。
  4. QDir::AllDirs:获取目录及其子目录下的所有目录信息。
  5. QDir::NoDotAndDotDot:不包括 “.” 和 “…” 目录。

你可以通过按位或运算符组合多个选项。例如,如果你想获取目录下的所有文件和目录信息(包括子目录),可以使用 QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot

下面是一个示例代码,展示如何使用 entryInfoList() 函数并指定可选的过滤参数:

#include <QDir>
#include <QFileInfoList>
#include <QDebug>

int main()
{
    QDir dir("C:/MyFiles"); // 指定目录路径
    QFileInfoList fileInfoList = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);

    // 遍历文件信息列表
    foreach (const QFileInfo& fileInfo, fileInfoList) {
        if (fileInfo.isFile()) {
            qDebug() << "File:" << fileInfo.fileName();
        } else if (fileInfo.isDir()) {
            qDebug() << "Directory:" << fileInfo.fileName();
        }
    }

    return 0;
}

在上述示例中,我们创建了一个 QDir 对象 dir,指定了目录路径 “C:/MyFiles”。然后,我们调用 entryInfoList() 函数,并指定了过滤参数 QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot,以获取目录下的所有文件和目录信息(包括子目录)。最后,通过遍历文件信息列表,我们输出了每个文件和目录的名称。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值