当前位置: 首页 > article >正文

Qt有哪些读取文件的方式

1. 使用 QFile 和 QTextStream(文本文件读取)

适用于纯文本文件,按行或整体读取。

示例代码:逐行读取

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine(); // 读取一行
        qDebug() << line;
    }
    file.close();
}

示例代码:读取整个文件

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream in(&file);
    QString content = in.readAll(); // 读取所有内容
    qDebug() << content;
    file.close();
}

特点

  • 适用场景:纯文本文件(.txt 等)。
  • QTextStream:提供了便捷的文本读取和写入功能。

2. 使用 QFile 和 QDataStream(二进制文件读取)

适用于二进制文件(如图片、数据流等),逐字节读取。

示例代码:读取二进制文件

QFile file("example.bin");
if (file.open(QIODevice::ReadOnly)) {
    QDataStream in(&file);
    qint32 value;
    in >> value; // 从文件读取数据
    qDebug() << "读取的值:" << value;
    file.close();
}

特点

  • 适用场景:二进制文件,或者自定义数据结构存储文件。
  • QDataStream:高效处理字节流,适合二进制数据的读写。

3. 使用 QFile 和 QByteArray(字节读取)

直接读取文件内容到 QByteArray,然后按需处理数据。

示例代码:读取文件所有字节

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly)) {
    QByteArray data = file.readAll(); // 读取所有字节
    qDebug() << "文件内容:" << data;
    file.close();
}

示例代码:逐行读取(按字节分割)

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly)) {
    while (!file.atEnd()) {
        QByteArray line = file.readLine(); // 按行读取字节
        qDebug() << "一行内容:" << line.trimmed();
    }
    file.close();
}

特点

  • 适用场景:文本文件、二进制文件均可。
  • QByteArray:提供灵活的字节数据操作。

4. 使用 QFileSystemModel(结合 UI 显示文件)

用于读取文件目录和内容,常与 QTreeViewQListView 等 UI 控件结合。

示例代码:显示目录文件列表

QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView;
tree->setModel(model);
tree->setRootIndex(model->index(QDir::currentPath()));
tree->show();

特点

  • 适用场景:图形界面显示文件系统结构。
  • 提供文件目录的树状、列表视图。

5. 使用 QIODevice::read() 和 QIODevice::readLine()

适用于自定义文件读取操作,提供灵活的字节级别读取。

示例代码:自定义读取文件

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly)) {
    while (!file.atEnd()) {
        QByteArray line = file.read(100); // 读取100字节
        qDebug() << line;
    }
    file.close();
}

特点

  • 提供灵活的读取长度和数据控制。
  • 可用于自定义文件格式解析。

6. 使用 QXmlStreamReader(XML 文件读取)

适用于XML 格式文件

示例代码:读取 XML 文件

QFile file("example.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;

QXmlStreamReader xml(&file);
while (!xml.atEnd() && !xml.hasError()) {
    xml.readNext();
    if (xml.isStartElement() && xml.name() == "element") {
        qDebug() << "Element 内容:" << xml.readElementText();
    }
}
file.close();

特点

  • 适用场景:解析结构化 XML 数据。
  • QXmlStreamReader:高效的事件驱动式 XML 解析。

7. 使用 QJsonDocument(JSON 文件读取)

适用于JSON 格式文件

示例代码:读取 JSON 文件

QFile file("example.json");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;

QByteArray data = file.readAll();
QJsonDocument doc = QJsonDocument::fromJson(data);
QJsonObject obj = doc.object();

qDebug() << "Key 内容:" << obj["key"].toString();
file.close();

特点

  • 适用场景:解析 JSON 格式数据。
  • 提供高效的 JSON 文件读写操作。

总结

方式适用场景核心类
QTextStream文本文件读取/写入QFile, QTextStream
QDataStream二进制文件读取/写入QFile, QDataStream
QByteArray + QFile字节级文件读取QFile, QByteArray
QFileSystemModelUI 显示文件系统结构QFileSystemModel
QXmlStreamReaderXML 文件解析QFile, QXmlStreamReader
QJsonDocumentJSON 文件解析QFile, QJsonDocument

根据文件类型和需求,可以选择适合的方式进行文件读取。


http://www.kler.cn/a/448665.html

相关文章:

  • 大数据操作实验一
  • java中list和map区别
  • 数字经济下的 AR 眼镜
  • 基于AT89C52单片机的6位电子密码锁设计
  • 什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
  • Qt5HttpServer : Qt官方的HTTP服务器
  • UE5 小怪血条
  • 34 Opencv 自定义角点检测
  • Unity Apple Vision Pro 开发教程:物体识别跟踪
  • 力扣 429 场周赛-前两题
  • Linux IPC:读写锁汇总整理
  • linux 合并uboot dtb kernel rootfs 文件制作nor flash 烧录镜像
  • 通过移除 -march=native 解决 Ubuntu 20.04 程序运行“段错误 (核心已转储)”问题的详解
  • TIDB的备份与恢复、上传OSS
  • 制作自己的Manjaro Linux Live DVD 光盘镜像
  • WebRTC服务质量(06)- 重传机制(03) NACK找到真正的丢包
  • Linux之压缩解压相关命令
  • 网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
  • MVCC了解
  • 2024 高级爬虫笔记(四)协程、selenium
  • 11爬虫:使用requests和selenium分别抓取4399网页游戏名称
  • LeetCode 35. 搜索插入位置 (C++实现)
  • 12.18 web后端开发——数据库
  • 【代码随想录】刷题记录(61)-二叉搜索树中的众数
  • 【Java入门指南 Day12:Java集合框架】
  • PostgreSQL和Postgis安装