Qt 读写文件(QFileQTextStreamQDataStream) 详解

news/2025/3/23 13:13:49/

一、读写文本文件 (QFile 类)

Qt QFile类是一个用于读取和写入文件的类,它提供了对文件的访问、读取和写入等操作。它既可以操作文本文件,也可以操作二进制文件。

QFile类的功能包括:

  1. 打开、关闭文件
  2. 读取文件内容
  3. 写入文件内容
  4. 支持文本模式和二进制模式的文件读写
  5. 支持随机访问文件

案例分析:

main.cpp

#include <QCoreApplication>#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 1:创建QFile对象,指定操作的相关文件QFile qfs("d:/qfiletext.txt");// 2:打开文件进行写操作 ReadOnly ReadWrite Append Truncateif(!qfs.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"打开文件失败,请生重新检查?";}else{qDebug()<<"恭喜你,打开文件成功!";}// 3:向打开的文件写数据信息qfs.write("zgl nb\n");qfs.write("ljx 666");// 4:关闭文件qfs.close();// 读取文件数据if(!qfs.open(QIODevice::ReadOnly|QIODevice::Text)){qDebug()<<"打开文件失败,请生重新检查?";}else{qDebug()<<"恭喜你,打开文件成功(读取数据)!";}// 定义字符指针char *pStr=new char[200];qint64 rcount=qfs.readLine(pStr,200);while((rcount!=0) && (rcount!=-1)){qDebug()<<pStr;rcount=qfs.readLine(pStr,200);}qfs.close();return a.exec();
}

编译执行结果:

二、读写文本文件 (QTextStream 类)

QTextStream 可以看作是 Qt 中的 IO 流,它提供了方便易用的 API 来进行文本的读写操作。QTextStream 可以与 QFile、QIODevice、QByteArray 等对象一起使用,方便在不同的数据源中读取和写入文本数据。

QTextStream 提供了多种方法来读写不同格式的文本数据,例如读写整数、浮点数、字符串、行等等。它还支持对文本编码的转换和设置,可以在不同的编码之间进行转换。

除了基本的读写操作外,QTextStream 还支持一些高级特性,例如自定义分隔符、读取特定数量的字符、查找字符串等等。并且,QTextStream 还支持流式操作,可以使代码变得更加简洁易懂。

案例分析:

main.cpp

#include <QCoreApplication>#include <QFile>
#include <QtDebug>
#include <QTextStream>
#include <QDataStream>
#include <QString>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 写入数据到文件QFile qfs("d:/qtextstreamfile.txt");if(!qfs.open(QIODevice::WriteOnly|QIODevice::Text)){qDebug()<<"打开文件失败,请重新检查?";}else{qDebug()<<"恭喜你,打开文件成功!";}QTextStream qtextstreamwrite(&qfs);// 向文件写入数据qtextstreamwrite<<(QString)"罗小白的干爹";qfs.close();// 从文件读取数据if(!qfs.open(QIODevice::ReadOnly|QIODevice::Text)){qDebug()<<"打开文件失败,请重新检查?";}else{qDebug()<<"恭喜你,打开文件成功(读取数据......)!";}QTextStream qtextstreamread(&qfs);while(!qtextstreamread.atEnd()){QString strtemp;qtextstreamread>>strtemp;qDebug()<<strtemp;}qfs.close();return a.exec();
}

编译执行结果:

三、读写二进制文件(QDataStream 类)

DataStream类是一个Qt类,用于提供跨平台的二进制数据流操作,可以对数据进行序列化和反序列化。它可以读和写基本数据类型、QByteArray和QString等。使用QDataStream进行数据序列化和反序列化是一种常见的持久化和网络数据传输的方式。

QDataStream类是基于Qt的QObject和QIODevice类实现的。它提供了一系列的方法,如读取、写入和设置字节顺序等。可以通过重载运算符<<和>>来简化序列化和反序列化的操作。同时,QDataStream还支持QVariant数据类型的序列化和反序列化。

注意:在使用QDataStream进行数据传输时,需要确保在发送和接收端使用相同的字节顺序,否则数据将无法正确解析。

下面是QDataStream类的一些常见方法:

  • setByteOrder():设置字节顺序
  • writeRawData():以原始数据的形式写入数据
  • writeBytes():以字节数组的形式写入数据
  • writeQString():以QString的形式写入数据
  • writeInt():以int的形式写入数据
  • writeFloat():以float的形式写入数据
  • operator<<():重载运算符<<,可以以流式语法写入多个数据类型
  • readRawData():以原始数据的形式读取数据
  • readBytes():以字节数组的形式读取数据
  • readQString():以QString的形式读取数据
  • readInt():以int的形式读取数据
  • readFloat():以float的形式读取数据
  • operator>>():重载运算符>>,可以以流式语法读取多个数据类型

案例分析:

main.cpp

#include <QCoreApplication>#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 将qnumber里面的数据写入到文件qint32 qnumber[3]={1,2,3};// 将qnumber数据以二进制方式存储到字节数组当中QByteArray bytearray;bytearray.resize(sizeof(qnumber));for(int i=0;i<3;i++){// for循环利用指针将每个整数复制到字符数组里面去memcpy(bytearray.data()+i*sizeof(qint32),&(qnumber[i]),sizeof(qint32));}// 将bytearray字节数组存储至对应文件当中QFileBinaryByte.datQFile qfs("d:/QFileBinaryByte.dat");if(!qfs.open(QIODevice::WriteOnly)){qDebug()<<"打开文件失败,请生重新检查?";}else{qDebug()<<"恭喜你,打开文件成功!";}qfs.write(bytearray);qfs.close();// 先打开,再读取qfs.open(QIODevice::ReadOnly);QByteArray byteArry=qfs.readAll();// 输出读取的二进制数据qDebug()<<"byteArry:"<<byteArry;// 将二进制数据转化为整数char *ctemp=byteArry.data();while(*ctemp){qDebug()<<*(qint32*)ctemp;ctemp=ctemp+sizeof (qint32);}qfs.close();return a.exec();
}

编译执行结果:


http://www.ppmy.cn/news/1166769.html

相关文章

华为OD 数组求和(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…

tcp/ip协议和opc协议对比详解

TCP/IP协议和OPC协议是两种重要的网络协议&#xff0c;它们在不同的网络层级上运行&#xff0c;并为数据传输和通信提供了不同的功能。 TCP/IP协议&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/互联网协议&#xff09;是互联网通信的…

对于高斯连续变量系统而言,它没有展现出量子霸权的特性 量子霸权是什么?

对于高斯连续变量系统而言&#xff0c;它没有展现出量子霸权的特性 量子霸权是什么? 对于高斯连续变量系统而言&#xff0c;它没有展现出量子霸权的特性的主要原因是&#xff0c;高斯连续变量系统的计算能力可以被经典计算机有效地模拟和仿真。高斯连续变量系统是指由一组连续…

【LeetCode】 387. 字符串中的第一个唯一字符

题目链接 文章目录 所有方法 复杂度 ( O ( n ) O(n) O(n)、 O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣)) Python3方法一&#xff1a;collections.Counter() 统计频次方法二&#xff1a;哈希映射 { key字符&#xff1a;value【首次出现的索引 or -1 出现多次】}方法三&#xff1a; c…

关于vant 的tabbar功能

1、想要实现tabbar页面A&#xff0c;其他的页面B&#xff08;非tabbar页面&#xff09;。 从A页面进入B页面&#xff0c;底部的active选中效果应该被取消掉&#xff0c;但是还是选中A。 按照官网的说法有两个方法 一、根据path路径 二、自定义的model 但是&#xff01;但是…

如何把Elasticsearch中的数据导出为CSV格式的文件

前言| 本文结合用户实际需求用按照数据量从小到大的提供三种方式从ES中将数据导出成CSV形式。本文将重点介Kibana/Elasticsearch高效导出的插件、工具集&#xff0c;通过本文你可以了解如下信息&#xff1a; 1&#xff0c;从kibana导出数据到csv文件 2&#xff0c;logstash导…

Youtrack Linux 安装

我们考虑最后应该使用的是 ZIP 方式的安装。 按照官方的说法如何设置运行 YouTrack 应该是非常简单的。 准备环境 根据官方的说法&#xff0c;我们需要做的就是下载 Zip 包&#xff0c;然后把 Zip 包解压到指定的目录中就可以了。 下载 当前官方的下载地址为&#xff1a;Ge…

大数据之LibrA数据库系统上下电管理

系统上电 操作场景 系统管理员进行例行维护停机后需要重新启动服务器与FusionInsight LibrA集群。如果安装双机Manager&#xff0c;上电后HA将确定主备管理节点。系统启动完成后需要启动依赖集群运行的上层业务。 对系统的影响 系统上电完成以前集群不可用。 前提条件 获…