Qt桌面应用开发 第八天(读写文件 文件编码 文件流)

目录

1.读文件

2.写文件及编码格式

2.1写文件

2.2编码格式

3.文件信息读取

4.文件流

4.1QTextStream

4.2QDataStream


1.读文件

需求:一个pushButton,点击之后可以选择一个txt文件的路径,路径会显示在lineEdit上,txt文件的内容会显示在textEdit上

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,[=]{QString filePath=QFileDialog::getOpenFileName(this,"打开文件","E:\\Qt\\File");ui->lineEdit->setText(filePath);QFile file(filePath);file.open(QIODevice::ReadOnly);QByteArray arr;arr=file.readAll();ui->textEdit->setText(arr);file.close();});
}

  1. file.open(QIODevice::ReadOnly)——读取方式QIODevice::ReadOnly或QFile::ReadOnly
  2. readAll()——将文件内容一次性全部读取
  3. readLine()——按行读取文件信息,atEnd()判断文件是否读到了尾部,如下:
//arr=file.readAll();while(!file.atEnd())
{arr += file.readLine();
}

2.写文件及编码格式

2.1写文件

    QFile file(filePath);file.open(QFileDevice::Append);file.write("你好");file.close();
  1. QFileDevice::WriteOnly会覆盖之前写的内容
  2. QFileDevice::Append会实现追加写入

2.2编码格式

Qt默认支持的编码格式是utf-8。读取其他格式的文件时,需要将文本设置为指定的格式再进行读取,如“gbk”格式。

    //文本的编码方式QTextCodec* codec=QTextCodec::codecForName("gbk");QByteArray arr;arr=file.readAll();//将文本设置为gbk编码格式ui->textEdit->setText(codec->toUnicode(arr));

3.文件信息读取

QFileInfo提供了文件名称、位置、后缀名、是否为目录等信息,可以获取文件大小、最后修改时间、读取时间

       QFileInfo info(filePath);qDebug()<<"文件名称:"<<info.fileName()<<"文件路劲:"<<info.filePath()<<"后缀名:"<<info.suffix()<<"文件大小:"<<info.size();qDebug()<<"创建日期:"<<info.created().toString("yyy-MM-dd hh:mm:ss");<<"最后修改日期:"<<info.lastModified().toString("yyy-MM-dd hh:mm:ss");

4.文件流

4.1QTextStream

处理文本数据,对Qt的字符串和I/O类进行了优化,可以使用<<或>>读写数据

【写数据】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::WriteOnly);QTextStream stream(&file);stream<<QString("123")<<123456;file.close();

【读数据】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::ReadOnly);QTextStream readStream(&file);QString arr=readStream.readAll();qDebug()<<arr;file.close();

4.2QDataStream

用于处理二进制数据,可以序列化Qt的数据类型为二进制格式,并能从二进制格式中反序列化它们,注意要按照数据类型读取数据

【写文件】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::WriteOnly);QDataStream stream(&file);stream<<QString("123")<<123456;file.close();

原因:文件是二进制的方式写入的

【读文件】

    QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::ReadOnly);//声明数据类型,按照数据类型读取数据QString str;int num;QDataStream stream(&file);stream>>str>>num;qDebug()<<str<<num;file.close();

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

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

相关文章

2411C++,学习C++提示2

C26包索引 template<auto N> consteval auto nth(auto... ts) { return ts...[N]; } static_assert(1 nth<0>(1, 2, 3)); static_assert(2 nth<1>(1, 2, 3)); static_assert(3 nth<2>(1, 2, 3));C26包索引的第1和最后 template <size_t Index,…

chrome允许http网站打开摄像头和麦克风

第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址&#xff0c;点击启用 第三步 重启 Chrome&#xff1a;设置完成后&#xff0c;点击页面底部的 “Relaunch” 按钮&#xff0c;重新启动 Chrome 浏览器&#xff0c;使更改生效。

IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)

IDEA的安装、配置与使用&#xff1a; Ⅰ、IDEA 的安装&#xff1a;1、IDEA 的下载地址(官网)&#xff1a;2、IDEA 分为两个版本&#xff1a;旗舰版 (Ultimate) 和 社区版 (Community)其一、两个不同版本的安装文件&#xff1a;其二、两个不同版本的详细对比&#xff1a; 3、IDE…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

基于SpringBoot实现的民宿管理系统(代码+论文)

&#x1f389;博主介绍&#xff1a;Java领域优质创作者&#xff0c;阿里云博客专家&#xff0c;计算机毕设实战导师。专注Java项目实战、毕设定制/协助 &#x1f4e2;主要服务内容&#xff1a;选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 &#x1f496;精彩专栏…

ComfyUI | ComfyUI桌面版发布,支持winmac多平台体验,汉化共享等技巧!(内附安装包)

ComfyUI 桌面版正式推出&#xff0c;支持 Windows 与 macOS 等多平台&#xff0c;为 AI 绘画爱好者带来全新体验。其安装包便捷易用&#xff0c;开启了轻松上手之旅。汉化共享功能更是一大亮点&#xff0c;打破语言障碍&#xff0c;促进知识交流与传播。在操作上&#xff0c;它…

基于 Vue2.0 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue2 Admin 是一个前端基于 Ant Design Pro 二次开发&#xff0c;后端基于 Nest.js 的全栈后台应用&#xff0c;适合学习全栈开发的同学参考学习。 &#x1f341; 前端技术栈&#xff1a; Vue2、Ant Design Vue、Vuex &#x1f341; 后端技术栈&#xff1a; Ne…

Flink 离线计算

文章目录 一、样例一&#xff1a;读 csv 文件生成 csv 文件二、样例二&#xff1a;读 starrocks 写 starrocks三、样例三&#xff1a;DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…

深度学习视频编解码开源项目介绍【持续更新】

DVC (Deep Video Compression) 介绍&#xff1a;DVC (Deep Video Compression) 是一个基于深度学习的视频压缩框架&#xff0c;它的目标是通过深度神经网络来提高视频编码的效率&#xff0c;并降低比特率&#xff0c;同时尽可能保持视频质量。DVC 是一个端到端的神经网络模型&…

RabbitMQ 应用问题

文章目录 1. 幂等性保障什么是幂等性MQ 的幂等性如何处理消息重复的问题1. 全局唯一ID2. 业务逻辑判断 2. 顺序性保障什么是顺序性保障什么情况会打破RabbitMQ的顺序性顺序性保障方案 3. 消息积压什么是消息积压造成消息积压的原因解决消息积压的方案 结论 1. 幂等性保障 什么…

【数据库系列】MySQL基础知识:深入理解DDL、DML与DQL操作

MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛用于数据存储和管理。理解MySQL的基本操作至关重要&#xff0c;尤其是数据定义语言&#xff08;DDL&#xff09;、数据操作语言&#xff08;DML&#xff09;和数据查询语言&#xff08;DQL…

PAT1085 Perfect Sequence(25)

//判断是否是连续的数 //判断是否只能第一个数是最小值 #include <cstdio> #include <algorithm> typedef long long ll; using namespace std; int n,p; const int maxn 100010; int arr[maxn];int binary(int l, int r, ll tgt){if(arr[n-1] < tgt) return n…

git 本地同步远端分支

一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…

Shell 编程基础知识

为什么要学 Shell&#xff1f; 学一个东西&#xff0c;我们大部分情况都是往实用性方向着想。从工作角度来讲&#xff0c;学习 Shell 是为了提高我们自己工作效率&#xff0c;提高产出&#xff0c;让我们在更少的时间完成更多的事情。 很多人会说 Shell 编程属于运维方面的知…

深度学习-48-AI应用实战之基于face_recognition的人脸识别

文章目录 1 人脸识别1.1 识别原理1.2 应用场景2 python实现人脸识别2.1 windows安装face_recognition2.2 安装问题及解决3 使用示例3.1 人脸区域检测3.2 对齐与编码3.3 人脸匹配3.4 信息录入4 附录4.1 函数cv2.rectangle4.2 参考附录1 人脸识别 通过图片或者摄像头的方式,将识…

深入浅出UART驱动开发与调试:从基础调试到虚拟驱动实现

往期内容 本专栏往期内容&#xff1a;Uart子系统 UART串口硬件介绍深入理解TTY体系&#xff1a;设备节点与驱动程序框架详解Linux串口应用编程&#xff1a;从UART到GPS模块及字符设备驱动 解UART 子系统&#xff1a;Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

vs 项目属性表

解释 在Vistual Studio中&#xff0c;属性包含项目编译生成所需的信息 此信息包括应用程序名称、扩展名&#xff08;如 DLL、LIB、EXE&#xff09;、编译器选项、链接器选项、调试器设置、自定义生成步骤等 项目节点右键->属性&#xff0c;访问属性页要访问属性页&#xff…

空洞武士3

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 collisionBox.hcollisionLayer.hcollisionManager.h collisionBox.h #pragma once #include "collisionLayer.h" #include "vector2.h" #include <functional>class CollisionManager; …

golang支持线程安全和自动过期map

在 Golang 中&#xff0c;原生的 map 类型并不支持并发安全&#xff0c;也没有内置的键过期机制。不过&#xff0c;有一些社区提供的库和方案可以满足这两个需求&#xff1a;线程安全和键过期。 1. 使用 sync.Map&#xff08;线程安全&#xff0c;但不支持过期&#xff09; Go…

Linux网络——IO模型和多路转接

通常所谓的IO&#xff0c;其本质就是等待通信和进行通信&#xff0c;即IO 等 拷贝。 那么想要做到高效的IO&#xff0c;就要在单位时间内&#xff0c;减少“等”的比重。 一.五种IO模型 阻塞 IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方…