Qt有哪些读取文件的方式

news/2024/12/23 20:15:31/

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.ppmy.cn/news/1557552.html

相关文章

C# 面试中常见递归算法

前言 今天我们主要总结一下C#面试中常见递归算法。 C#经典十大排序算法&#xff08;完结&#xff09; C#递归算法计算阶乘的方法 一个正整数的阶乘&#xff08;factorial&#xff09;是所有小于及等于该数的正整数的积&#xff0c;并且0的阶乘为1。自然数n的阶乘写作n!。180…

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…

自动呼入机器人如何实现自动化学习?

自动呼入机器人如何实现自动化学习&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 自动呼入机器人的自动化学习是其智能化和持续改进的核心驱动力。通过不断从用户交互中获取新知识&#xff0c;并…

【集合】Java 8 - Stream API 17种常用操作与案例详解

文章目录 Java8 Stream API 17种常用操作与案例详解1. collect()&#xff1a;将流中的元素收集到集合中2. filter()&#xff1a;根据条件过滤流中的元素3. map()&#xff1a;元素映射为另一个值4. forEach()&#xff1a;对流中的元素执行操作5. flatMap()&#xff1a;将流中的元…

CSS Grid 布局:属性及使用详解

CSS Grid 布局&#xff1a;属性及使用详解 一、CSS Grid 布局的基础概念二、主要的 CSS Grid 属性1、display: grid / display: inline-grid声明 Grid 容器2、grid-template-columns / grid-template-rowsGrid 容器中列和行的尺寸3、 grid-template-areas命名布局区域4、gap/ g…

基于koa服务端脚手架搭建(文件加载器) --【elpis全栈项目笔记】

基于koa服务端脚手架(文件加载器) --【elpis-core】 前言&#xff1a; elpis-core 是一个项目文件加载器。基于一定的约定&#xff0c;将功能不同的代码分类放置到不同的目录下管理。适用于项目代码规范化、减少维护成本、沟通成本&#xff0c;易于扩展。&#xff08;简易版的 …

C# 动态组合判断条件对数据进行筛选

一、设计背景 工作上需求开发一个文本处理软件&#xff0c;我要在界面上编辑文本筛选条件&#xff0c;这就需要动态判断每一行文本数据。我首先是将单行文本根据空格分割成了几十个子串&#xff0c;然后对子串进行条件判断。一开始设想的动态组合判断条件&#xff0c;然后一行一…

php面对对象的基础知识

php面对对象的基础知识 程序开发&#xff1a;面向过程vs面向对象 面向过程面向过程是一种以“整体事件”为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 面向对…