学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)

每日一言

        把大目标拆成小步,每天前进一点点,终会抵达终点。

QFile读取文件

我们记事本要进行读取文件、写入文件、等等的操作,那么这个时候我们的QT有一个QT类叫做QFile这个类的话是专门对于文件操作的,所以我们来学习

我们在QT的帮助文档这边进行查看,会发现这边包含了几个公共的函数,那么他们之间有什么联系呢?

二、QFile 与 setFileName 的关系

  1. 关联文件路径的方式
    QFile 要操作文件,得知道文件路径。有两种常见方式:
    1. 构造时指定:通过带 name 参数的构造函数,比如 QFile(const QString &name) ,创建对象时就确定好要操作的文件

例如QFile file("test.txt"); ,后续对 file 的操作就围绕 test.txt 这个文件。

    1. 先创建对象再设置:先用无参构造(QFile() )或者带父对象的构造(QFile(QObject *parent) )创建 QFile 对象,此时对象还没关联具体文件,接着调用 setFileName 函数传入文件路径,来建立关联,例如:

   QFile file;

  file.setFileName("test.txt");

之后就可以用 file 操作 test.txt 文件,比如打开、读写等

  1. 存在的意义
    setFileName 提供了灵活设置文件路径的能力。有些场景下,创建 QFile 对象时还不确定要操作哪个文件(比如文件路径由用户后续选择、从配置中读取等 ),就可以先创建对象,后续再用 setFileName 来指定,让代码逻辑更灵活。

这个是我们的运行结果,我们使用创建对象的方法,对象调用这个setFileName(“文件地址”)。

file.open(以怎么样的方式打开)

Open的模式在这个QIODevice这个类里面

我们找到后会发现,有可读可写,追加等等方式,那么我们这边选择只读和Text,这个Test这个的话是什么意思呢?就是简单来说,就是 Qt 帮开发者处理了不同平台换行符不一致的问题,让文本的读写在跨平台场景下更顺畅,减少了因换行符差异带来的适配工作量 。

那么我们通过管道(按位或)来进行连接

  • |(按位或):用于组合多个选项,是打开文件时的正确写法。

我们打开后需要进行读取操作使用file.read()

这个操作就是,我们可以知道read里面的参数填什么,看到需要填写一个是数组指针,一个是长度

  • 参数
    • data:指向用于存储读取数据的 ** 字符数组(缓冲区)** 的指针。
    • maxSize:指定最多读取的字节数,即缓冲区的最大容量。

那么我们进行定义一个数组,将数组名传进去,这边的话我们需要对数组进行初始化,那我们就都初始化为\0吧,空字符

//在 C/C++ 里,当你对数组进行部分初始化时(也就是只显式初始化数组的部分元素),剩余未显式初始化的元素会被编译器自动初始化为对应类型的 “零值” 

  • read() 的作用:将文件内容直接复制到 context 数组的内存空间中。
    例如,若文件内容是 "Hello\nWorld!"(共 12 字节),则 context 数组的前 12 个字节会被填充为对应的字符编码(如 UTF-8),后续字节保持为 '\0'

qDebug() 如何输出内容?

C 风格字符串的特性
context 是一个 char* 类型的指针,指向数组的首地址。qDebug() 会将其视为以 '\0' 结尾的 C 风格字符串,并从首地址开始逐字节读取,直到遇到第一个 '\0' 为止。

好的,那么我们的文件会其实是会打开失败的啊

我们进行了一个判断,为什么可以这样判断?

因为

 Qt 的 QFile::open()

在 Qt 中,QFile::open() 返回bool

  • 成功打开:返回true
  • 打开失败:返回false,可通过QFile::error()获取具体错误类型。

所以我们就直接如果返回值为!1的那我们就输出错误信息file open error。

还有这个read这个是失败返回-1的,所以我们就可以当==-1的时候,我们就直接退出程序。

还有一种写法是这样的

 

QFile写入文件

这个写入文件的话也是一样的操作,路径、打开文件、写入内容、关闭资源

不同的就是这个open的打开方式改为关于写的,我这边是只写WriteOnly

然后我们看到上方的框框 ,我点击写入文件的话,如果我在这个路径上面没有这个文件的话就会创建一个这个文件,然后写入了我写的话,我们这个write的参数是可以填写三个,一个是字符数组(c风格字符串),QByteArray、还有一个是字符串加上存入的指定的大小

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

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

相关文章

AD736ARZ-R7精密真有效值转换器 高精度测量的首选方案

AD736ARZ-R7精密转换器产品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)转直流(DC)转换器,采用SOIC-8封装,适用于需要精确测量交流或复杂波形…

【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)

文章目录前言一、ECharts准备工作1. 检查ECharts安装2. 导入ECharts3. 创建饼图组件4. 模板部分二、报表导出功能实现1. 安装依赖2. 导入依赖3. 完整导出函数实现4. 样式优化三、完整组件实现四、常见问题与解决方案1. 图表截图不完整或模糊2. 图表背景透明3. 导出PDF中文乱码4…

vue3+express联调接口时报“\“username\“ is required“问题

我用node .js的express框架写的登录接口,发现postman可以调通,但是vue3前端报错vue3我发现是我后端node.js的app.js入口文件中配置的解析前端参数的解析中间件和前端请求头中的Content-Type配置不一致的原因 解决方案 因为我后端配置解析表单数据的中间件…

《月亮与六便士》:天才的背叛与凡人救赎的残酷辩证法

当满地六便士成了庸人的火葬场​​毛姆笔下的斯特里克兰德,是一把捅穿中产幻梦的利刃。这个抛妻弃子、背叛友人的证券经纪人,在伦敦客厅的茶香与银勺碰撞声中,突然听见了远方的惊雷——“我必须画画”。如书中所言:​​“在满地都…

vue2往vue3升级需要注意的点(个人建议非必要别直接升级)

将 Vue 2 项目升级到 Vue 3 的过程中,需要重点关注以下几个难点和关键点: 建议小项目直接用vue3重写更快,bug更少 文章目录1. **Composition API 的学习与应用**2. **全局 API 的变更**3. **模板语法的兼容性变化**4. **组件选项和生命周期的…

聚焦数据资源建设与应用,浙江省质科院赴景联文科技调研交流

7月10日上午,浙江省质科院标准化中心副主任蒋建平、应珊婷等一行领导带队莅临景联文科技调研指导工作。双方围绕工业数据展开深度交流。座谈会上,景联文科技详细汇报了数据资源建设与应用方面的成果与规划,介绍了公共数据授权运营与对外合作的…

【Linux】系统引导修复

目录 开机引导过程 一.通电 二.BIOS环境检测 三.磁盘引导阶段 四.文件引导阶段 自动引导配置文件丢失修复 内核参数文件丢失修复 内核镜像文件丢失修复 内核初始化文件丢失修复 boot目录误删丢失修复 开机引导过程 磁盘引导阶段 /boot/grub2/grub.cfg #读取自动引…

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析 编程题 第一题 判断是否存在重复的子序列 题目描述 从m 个字符中选取字符,生成n 个符号的序列,使得其中没有2 个相邻的子序列相同。 如从1,2,3,生成长度为5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0锁表确认及解除锁表完全指南

目录 一、MySQL锁机制基础 1.1 锁的分类与作用 1.2 关键锁类型详解 二、锁表的常见原因与风险 2.1 引发锁表的典型场景 2.2 锁表的业务影响 三、锁表状态确认方法 3.1 基础工具:SHOW PROCESSLIST 3.2 MySQL 8.0锁信息查询(推荐) 3.2…

springboot生成pdf方案之dot/html/图片转pdf三种方式

文章目录pdf生成方案dot转pdfhtml转pdfopenhtmltopdfaspose-pdf实践playwright实践图片转pdfApache PDFBox实践框架场景匹配后记前言:随着客户对报告审美的提升,需求也越来越五彩斑斓~ 原有的dot模板已经满足不了他们了!这篇文章主打列出各种…

前端开发—全栈开发

全栈开发者在面试前端或全栈岗位时,自我介绍需要巧妙融合“技术广度”与“岗位针对性”,避免成为泛泛而谈的“样样通样样松”。以下是结合面试官关注点和全栈特性的专业介绍策略:🧠 一、自我介绍的核心理念 突出全栈优势&#xff…

Redis生产环境过期策略配置指南:务实落地,避免踩坑

在生产环境中合理配置Redis过期策略是保障系统稳定性和内存效率的关键。以下配置建议基于实战经验,避免理论堆砌,直击核心要点:一、核心策略配置:惰性删除 定期删除(默认已启用)无需额外配置:R…

Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我们将介绍如何在 Ubuntu 20.04 上安装 Node.js 20.x,以及如何安装 npm、cnpm 和 pnpm 来提高开发效率 ⚡。1️⃣ 安装 Node.js 20.x 为了确保使用最…

【时时三省】(C语言基础)通过指针引用数组元素

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省引用一个数组元素,可以用下面两种方法:( 1 )下标法,如a[i]形式;( 2 )指针法,如* ( a i )或* ( p i )。其中a是数组名,p…

Guava LoadingCache

LoadingCache 是 Google Guava 库提供的一个高级缓存实现,它通过自动加载机制简化了缓存使用模式。核心特性自动加载机制当缓存未命中时,自动调用指定的 CacheLoader 加载数据线程安全:并发请求下,相同key只会加载一次灵活的过期策…

基于LSTM-GRU模型的黄金价格动态监测:关税政策与美指的量化关联研究

摘要:本文通过BERT-Large模型对关税政策进行语义解析,结合LSTM-GRU混合模型、DCC-GARCH动态相关性模型及蒙特卡洛情景分析,量化解析7月11日黄金价格异动背后的三大驱动因子——政策冲击、美元指数压制与美联储政策不确定性,提供AI…

V少JS基础班之第七弹

文章目录一、 前言二、本节涉及知识点三、重点内容1、prototype2、constructor3、中场回顾&总结4、__ proto__5、第二次中场回顾&总结6、原型链6、第三次中场回顾&总结7、原型链中的奇点一、 前言 第七弹内容是原型链。网络上原型链的资料很多。但是我看了很多篇&…

Nuxt3自动打包及自动修改端口号脚本

Nuxt3自动打包及自动修改端口号脚本技术文章大纲 背景与需求 Nuxt3作为现代Vue框架,开发中常需处理打包部署和端口配置问题。自动化脚本可提升效率,减少手动操作错误。 实现自动打包 利用Nuxt3内置命令结合Node.js脚本实现自动化构建。通过npm run build…

红海云国资案例之多层级工贸集团的一体化HR平台建设实战

在中国经济迈向高质量发展的进程中,国有企业作为重要的经济支柱和行业引领者,正面临着数字化转型的深刻变革。F集团作为G市首家实现工贸一体化运营的大型企业,位列中国轻工业百强,其在人力资源数字化转型中的探索和实践&#xff0…

TCP详解——流量控制、滑动窗口

目录 流量控制 滑动窗口 丢包重传 情况一:数据到达,应答丢失 情况二:数据包丢失 流量控制 TCP协议会根据接收端的缓冲区大小来调整发送速度,剩余空间多则发送速度快,否则降低发送速度 接收端将⾃⼰可以接收的缓…