Qt 读写文件(QFileQTextStreamQDataStream) 详解

news2024/10/6 14:37:05

一、读写文本文件 (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 Truncate
    if(!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.dat
    QFile 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.coloradmin.cn/o/1116310.html

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

相关文章

如何让ChatGPT生成图片?

目录 一、那么如何解决让ChatGPT具有画图能力的问题呢&#xff1f; 二、那ChatGPT为什么能生成图片呢&#xff1f; 我们都知道ChatGPT只是个纯文本的AI模型&#xff0c;不具备画图能力。它可以生成文本&#xff0c;但如果让他生成图片就会显示如下的声明&#xff1a; 但通过本…

前端多媒体处理工具——ffmpeg的使用

写在前面 在前端领域&#xff0c;FFmpeg 是一个非常有用的工具&#xff0c;它提供了多种媒体格式的封装和解封装&#xff0c;包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率切换等。可以在多种操作系统安装使用。 安装 下载FFmpeg 在网…

服务器数据恢复-某银行服务器硬盘数据恢复案例

服务器故障&分析&#xff1a; 某银行的某一业务模块崩溃&#xff0c;无法正常使用。排查服务器故障&#xff0c;发现运行该业务模块的服务器中多块硬盘离线&#xff0c;导致上层应用崩溃。 故障服务器内多块硬盘掉线&#xff0c;硬盘掉线数量超过服务器raid阵列冗余级别所允…

文件目录(文件控制块FCB,目录结构,索引结点)

1.文件控制块&#xff08;实现文件目录的关键数据结构) 目录文件中的一条记录就是文件控制块&#xff08;FCB&#xff09; FCB的有序集合称为“文件目录”&#xff0c;一个FCB就是一个文件目录项。 1.FCB的组成 FCB中包含了文件的基本信息&#xff08;文件名、物理地址、逻…

墨迹天气商业版UTF-8模板,Discuz3.4灰白色风格(带教程)

1.版本支持&#xff1a;Discuzx3.4版本&#xff0c;Discuzx3.3版本&#xff0c;DiscuzX3.2版本。包括网站首页&#xff0c;论坛首页&#xff0c;论坛列表页&#xff0c;论坛内容页&#xff0c;论坛瀑布流,资讯列表页(支持多个)&#xff0c;产品列表页(支持多个)&#xff0c;关于…

【TES600】青翼科技基于XC7K325T与TMS320C6678的通用信号处理平台

板卡概述 TES600是一款基于FPGA&#xff0b;DSP协同处理架构的通用高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为主处理单元&#xff0c;采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为协处理单元&#xff0c;具有1个FMC…

Android Studio(2022.3.1)设置阿里云源-新旧版本

新版本 #settings.gradle.ktsmaven { url uri("https://maven.aliyun.com/repository/public/") }maven { url uri("https://maven.aliyun.com/repository/google/") }maven { url uri("https://maven.aliyun.com/repository/jcenter/") }ma…

VBA操作数据库

相关背景&#xff1a; 对于数据分析同学&#xff0c;一般SQL&#xff0c;EXCEL是必备技能&#xff0c;但对于VBA和Python可能有的同学不会&#xff1b;在处理本地数据上(诸如excel、txt|csv文本&#xff09;&#xff0c;后续尝试使用VBA或者Python写一个sql查询的GUI界面&…

dubbogo-1 基础rpc服务

文章目录 基本环境处理编译pb接口开启rpc调用业务观察qa1 能取出protoc里面的字段值吗&#xff1f; 基本环境处理 https://cn.dubbo.apache.org/zh-cn/overview/quickstart/go/install/ 这里没有 protoc-gen-go --version 执行 go get -u github.com/golang/protobuf/protoc…

嵌入式养成计划-45----QT--事件机制--定时器事件--键盘事件和鼠标事件--绘制事件

一百一十五、事件机制 当这件事情发生时&#xff0c;会自动走对应的函数处理&#xff08;重写的事件函数&#xff09; 115.1 事件处理简介 什么是事件&#xff1f; (重点) 件是由窗口系统或者自身产生的&#xff0c;用以响应所发生的各类事情&#xff0c;比如用户按下并释放…

vscode调试技巧 断言 assert

目录 调试技巧标题debug release介绍调试技巧断点 断点的意思 就是代码执行到断点处停下来&#xff0c;让你去调试。不管前面有多少代码&#xff0c;直接跳到断点处&#xff08;当然前面的已经执行&#xff09;逐过程 不会进入调用函数内部&#xff0c;不管里面怎么执行。 逐语…

精讲stable diffusion的controlNet插件

controlNet插件是stable diffusion的一个重要插件&#xff0c;甚至可以说正是因为有了controlNet插件&#xff0c;stable diffusion才会具有midjourney所不具备的独特魅力&#xff01; 我们今天就一起来学习下controlNet插件的安装和每个模型的用法 插件主页 独立的controlN…

MSP430F5529时钟系统配置

1、为什么要进行时钟管理&#xff1f;   时钟系统是一个数字器件的命脉&#xff0c;对于普通的51单片机来说&#xff0c;它的时钟来源只有外部晶振&#xff0c;然后每12个振荡周期完成一个基本操作&#xff0c;所以也叫做12T单片机&#xff0c;但对于当前高级一点的单片机来…

牛客:NC59 矩阵的最小路径和

牛客&#xff1a;NC59 矩阵的最小路径和 文章目录 牛客&#xff1a;NC59 矩阵的最小路径和题目描述题解思路题解代码 题目描述 题解思路 动态规划&#xff0c;递推公式&#xff1a;matrix[i][j] min(matrix[i-1][j], matrix[i][j-1]) 题解代码 func minPathSum( matrix [][…

性能压测工具 —— wrk

一般我们压测的时候&#xff0c;需要了解衡量系统性能的一些参数指标&#xff0c;比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线&#xff1a;P95。平均100%的请求中95%已经响应的时间 99线&#xff1a;P99。平均100%的请求中99%已经响应的时间 平…

maven聚合和继承

一、什么是maven的聚合和继承&why 随着技术飞速发展&#xff0c;各类用户对软件的要求越来越高&#xff0c;软件也变得越来越复杂。 软件设计人员往往会采用各种方式对软件划分模块&#xff0c;已得到更加清晰的设计及更高的复用性。 当把Maven应用到实际项目中的时候&am…

多年没有遇到如此流畅的面试了

美东一公司的面试&#xff0c;有多年没有遇到如此流畅的面试了。 本来说的面试时间是 30 分钟&#xff0c;这个还是第一轮处于电话面试那种&#xff0c;但是不知道为什么最后面试整个时间都延长到了快一个小时&#xff0c;貌似双方都还继续沟通下&#xff0c;有点意犹未尽的感觉…

ZKP5.1 Plonk Interactive Oracle Proofs (KZG‘10)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 5: The Plonk SNARK (Dan Boneh) 5.1 KZG’10 general SNARK A polynomial commitment scheme A polynomial interactive oracle proof (IOP) Review: polynomial commitments The KZG poly-commit scheme commit a bind…

自动化测试07Selenium01

目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 工作原理 SeleniumJava环境搭建 Selenium常用的API使用 定位元素findElement CSS选择语法 id选择器&#xff1a;#id 类选择 .class 标签选择器 标签名 后代选择器 父级选择器 自己选择器 xpath …

AM@两种余项型泰勒公式的对比和总结@常用函数的麦克劳林公式

文章目录 abstract两种余项型泰勒公式的对比和总结Maclaurin公式常用函数的Maclaurin公式推导例求极限按幂展开 abstract 泰勒公式的两种余项型(Penao&Lagrange)泰勒公式的对比和总结常用的Maclaurin公式列举(Peano余项型为主) 两种余项型泰勒公式的对比和总结 Taylor公式…