详解Qt框架下文件读写操作

在Qt开发中,文件读写操作是一项基本且重要的技能。Qt为此提供了QFile、QTextStream和QDataStream等类,以满足开发者对不同类型文件的操作需求。本文将详细阐述这些类的使用方法,并结合实例代码,帮助读者深入了解和掌握Qt中文件读写操作的具体实现。

一、基础文件操作:QFile类

QFile类是Qt中用于文件基本操作的核心类,它可以完成文件的打开、关闭、读取、写入等任务。

#include <QFile>// 创建QFile对象,关联到指定的文件路径
QFile file("output.txt");// 尝试以读写模式打开文件
if (!file.open(QIODevice::ReadWrite)) {qDebug() << "无法打开文件: " << file.errorString();return;
}// 向文件写入数据(这里以二进制数据为例)
char data[] = {'H', 'e', 'l', 'l', 'o'};
file.write(data, sizeof(data));// 关闭文件
file.close();

二、文本文件处理:QTextStream类

当处理文本文件时,QTextStream类提供了便捷高效的接口。以下代码展示了如何使用QTextStream进行文本文件的读写操作:

#include <QFile>
#include <QTextStream>// 打开文件并关联到QTextStream对象
QFile file("textfile.txt");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) {qDebug() << "无法打开文件:" << file.errorString();return;
}
QTextStream out(&file);// 向文件写入文本
out << "Hello, Qt World!\n";// 清除流的状态,移动到文件开头
out.seek(0);// 从文件读取文本
QTextStream in(&file);
while (!in.atEnd()) {QString line = in.readLine();qDebug() << "读取的文本行:" << line;
}// 关闭文件
file.close();

QTextStream可以参考: 链接

三、二进制数据序列化:QDataStream类

对于结构化数据的读写,特别是涉及到对象序列化的情况,QDataStream类是理想的选择。以下代码展示了如何使用QDataStream进行二进制文件的读写:

#include <QFile>
#include <QDataStream>// 定义一个简单的数据结构
struct Record {int id;QString name;
};// 向文件写入结构化数据
Record r = {1, "Example"};
QFile file("binarydata.bin");
if (file.open(QIODevice::WriteOnly)) {QDataStream out(&file);out << r;file.close();
}// 从文件读取结构化数据
Record readR;
if (file.open(QIODevice::ReadOnly)) {QDataStream in(&file);in >> readR;file.close();qDebug() << "读取的记录:ID=" << readR.id << ", Name=" << readR.name;
}

QDataStream可以参考: 链接

补充

文件状态与操作
  • 检查文件是否处于结束位置:
if (file.atEnd()) {// 文件已读取到末尾
}
  • 移动文件指针位置:
file.seek(offset); // 将文件指针移动到offset位置
  • 获取文件大小:
qint64 fileSize = file.size();
  • 检查文件是否存在与权限:
if (QFile::exists("example.txt")) {// 文件存在
}
if (file.exists()) {// 同样检查当前QFile对象关联的文件是否存在
}
if (file.isReadable()) {// 文件可读
}
if (file.isWritable()) {// 文件可写
}
注意事项
  • 在进行文件操作前务必检查open()函数的返回值,确保文件已成功打开。
  • 当写入数据后,特别是在频繁的小块数据写入后,应及时调用flush()函数确保数据立即写入磁盘,防止数据丢失。
  • 使用相对路径时要注意工作目录的变化,最好使用绝对路径或配合QDir类进行路径处理。
  • 对于文件关闭,即使析构QFile对象也会尝试关闭文件,但出于良好的编程习惯,仍然建议在完成操作后显式调用close()函数。
  • 使用QFile进行文件操作时可能会抛出异常,应在必要时使用try-catch语句进行错误处理。
删除和重命名文件

QFile也支持文件删除和重命名操作:

QFile::remove("oldfile.txt"); // 删除文件
QFile::rename("oldfile.txt", "newfile.txt"); // 重命名文件

总之,通过合理使用Qt提供的QFile、QTextStream和QDataStream类,开发者可以高效、准确地实现文件的读写操作,从而更好地满足应用程序的数据存储与读取需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

012:vue结合纯CSS实现蛇形流程图/步骤条

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"container"><div v-for"(item, index) in list" class"grid-item"><div class"step">step{{index1}}</div></div&…

MySQL - 深入MySQL索引的秘密(一)

1. 如果没有任何索引,数据库是如何根据查询语句搜索数据的? 在磁盘文件中,数据页之间是组成双向链表的,然后数据页内部的数据行是组成单向链表的,而且数据行是根据主键从小到大排序的。然后每个数据页里都会有一个页目录,里面根据数据行的主键存放了一个目录,同时数据行…

新版HI3559AV100开发注意事项(三)

新版HI3559AV100开发注意事项&#xff08;三&#xff09; 十九、用的sdk是Hi3559V200_MobileCam_SDK_V1.0.1.5 播放AAC音频文件&#xff0c;adec->ao;adec的初始化里面包括了aaclc解码器的注册&#xff0c;可是在HI_MPI_ADEC_RegisterDecoder(&s32Handle, &stAac);…

【漏洞复现】OpenMetadata 命令执行漏洞复现(CVE-2024-28255)

声明&#xff1a;亲爱的读者&#xff0c;我们诚挚地提醒您&#xff0c;Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失&#xff0c;均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

类和对象中阶1⃣️-默认成员函数(构造函数 析构函数)

目录 1.类的6个默认成员函数 2.构造函数 2.1 概念 3.析构函数 3.1 概念 3.2 特性 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成…

JavaThread线程

目录 程序--进程--线程 程序&#xff1a; 进程&#xff1a; 线程&#xff1a; 进程和线程的关系 创建线程 单线程模式 代码 图解 运行 代码 运行 创建线程 方式一 代码 运行 方式二 代码 运行 总结&#xff1a; Thread类中常用的方法 1、 代码 运行…

JAVA发票验真接口、票据ocr、数电票在线查验真伪

发票验真接口&#xff0c;,实时联网核验发票真伪,查验一致返回全票面信息&#xff0c;支持查验增值税发票管理系统开具的发票,支持批量核验发票&#xff0c;翔云发票查验送发票识别,助您摆脱手动输入繁琐,提升工作效率。 发票查验接口适用于银行、金融、代理记账等发票管理数量…

豆腐厂废水处理设备价格

诸城市鑫淼环保小编带大家了解一下豆腐厂废水处理设备价格 设备价格&#xff1a; 1.预处理设备成本&#xff1a;格栅、沉淀池等预处理设备的价格因尺寸和材料而异&#xff0c;一般在几千到数万元不等。 2.生物处理设备费用&#xff1a;活性污泥法、MBR膜生物反应器等生物处理设…

电脑剪切复制到u盘文件丢失怎么办?未备份者的应急指南

在日常生活和工作中&#xff0c;我们经常使用电脑和U盘进行文件的传输和备份。然而&#xff0c;在剪切复制文件到U盘的过程中&#xff0c;有时可能会遇到文件丢失或无法找到的问题&#xff0c;而这时又没有备份&#xff0c;这无疑让人头疼不已。那么&#xff0c;面对这种情况&a…

java的aop实现方式

java的aop可以通过三种方式来实现 1.使用ajc编译的插件来完成增强 这种方法会直接修改编译完成的class文件&#xff0c;不需要依赖springboot 2.动态代理proxy 2.1cglib 可以代理接口&#xff0c;方法等&#xff0c;这种方式代理类是目标类的子类&#xff0c;要求目标类不…

斐波那契数列递归实现和for循环实现

什么是斐波那契数列 数列: 1 1 2 3 5 8 13 21 34 55 … x 位置: 1 2 3 4 5 6 7 8 9 10 … n // 1.斐波那契的递归实现function fibonacci(n) {if (n 1 || n 2) return 1return fibonacci(n-1) fibonacci(n-2)}// 2.斐波那契的for循环实现function fibonacci(n) {// 特殊的情…

使用 EFCore 和 PostgreSQL 实现向量存储及检索

随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。FAISS、Milvus、Pinecone、Chroma、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5…

Ps 滤镜:风格化

风格化 Stylize滤镜通过置换像素和通过查找并增加图像的对比度&#xff0c;基于原图像生成绘画或印象派的效果。 查找边缘 Find Edges “查找边缘”滤镜通过分析图像的色彩和亮度变化来识别边缘。 这种处理方式使得图像的主要轮廓以一种艺术化的线条形式被强调出来&#xff0c;…

js中如何进行隐式类型转换

ToPrimitive 方法&#xff0c;是js中每个值隐含的自带方法&#xff0c;用来将值转换为基本类型。如果值为基本类型&#xff0c;则返回本身&#xff0c;否则&#xff0c;进行转换&#xff0c;返回基本类型值。 /** * obj 需要转换的对象 * type 期望的结果类型 Number或String …

UVA839 Not so Mobile 天平 解题报告

题目链接 https://vjudge.net/problem/UVA-839 题目大意 输入一个树状天平&#xff0c;根据力矩相等原则判断是否平衡。如图6-5所示&#xff0c;所谓力矩相等&#xff0c;就是WlDlWrDr&#xff0c;其中Wl和Wr分别为左右两边砝码的重量&#xff0c;D为距离。 采用递归&#…

大语言模型的指令调优:综述

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Instruction Tuning for Large Language Models: A Survey 论文地址&#xff1a;https://arxiv.org/abs/2308.10792 指令调优是提升大语言模型&#xff08;LLMs&#xff09;性能…

python爬虫3-xpath批量定位元素的方法

以爬取豆瓣影评的电影名称为例。 第一步 鼠标右键单击&#xff0c;选择【检查】 第二步 切换到【元素】标签&#xff0c;展示源代码 选择下图的小箭头&#xff0c;再选择想要定位的文本&#xff0c;源代码会自动定位到该文本。 第三步 鼠标放在该文本的源代码上&#xff0c;…

Pytorch官方FlashAttention速度测试

在Pytorch的2.2版本更新文档中&#xff0c;官方重点强调了通过实现FlashAtteneion-v2实现了对scaled_dot_product_attention约2X左右的加速。 今天抽空亲自试了下&#xff0c;看看加速效果是否如官方所说。测试前需要将Pytorch的版本更新到2.2及以上&#xff0c;下面是测试代码…

【QT教程】QT6SVG处理

QT6SVG处理 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…

全量知识系统 程序详细设计 之 先验逻辑-实现:从“平凡”回到“平凡” (百度文库QA)

Q1. 思考&#xff1a;数学中的平凡&#xff0c;和程序中的平凡&#xff08;比如POJO&#xff09;、语言中的平凡&#xff08;比如纯文本&#xff09;&#xff0c;数据中的平凡&#xff08;比如 Number&#xff09;。因为我设计中的全知系统将设计的三个方面刻画为语言设计、程序…