• Qt5开发从入门到精通——第九篇二节( Qt5 文件及磁盘处理—— 读写二进制文件)


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
    博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀

    前言

    本章节会给大家带来Qt5 文件及磁盘处理—— 读写二进制文件的开发实例详解。

    一、读写二进制文件概述

    QDataStream 类提供了将二进制文件串行化的功能,用于实现 C++基本数据类型,如 char 、short 、 int 、 char*等的串行化。更复杂的串行化操作则是通过将数据类型分解为基本类型来完成的。

    二、实例效果

    图一
    生成的二进制文件,会在相对应工程文件的构建文件内build-xxxx
    在这里插入图片描述
    图二
    使用UltraEdit 打开二进制文件
    在这里插入图片描述
    图三
    读取二进制文件,转化为字符串和整型,输出到控制台
    在这里插入图片描述

    三、原码解析

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include 
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
    
    
        void fileFun();
    };
    
    #endif // MAINWINDOW_H
    
    

    main.cpp

    #include "mainwindow.h"
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include 
    #include 
    #include 
    #include 
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent)
    {
        fileFun();
    }
    void MainWindow::fileFun ()
    {
        /*将二进制数据写到数据流*/
        /*每一个条目都以定义的二进制格
    式写入文件。 Qt 中的很多类型,包括 QBrush 、 QColor 、 QDateTime 、 QFont 、 QPixmap 、 QString 、
    QVariant 等都可以写入数据流。 QDataStream 类写入了 name(QString) 、 birthday(QDate) 和
    age(qint32)这三个数据。注意,在读取时也要使用相同的类型读出。*/
        QFile file("binary.dat");
        file.open(QIODevice::WriteOnly | QIODevice::Truncate) ;
        QDataStream out (&file); //将数据序列化
        out<< QString(tr("乔伊波伊的出生时间:"));//字符串序列化
        out << QDate::fromString("2000/03/22", "yyyy/MM/dd");
        out<<(qint32)22; //整数序列化
        file.close();
        /*从文件中读取数据*/
    
        /*QDataStream 类可以读
    取任意的以 QIODevice 为基类的类生成对象产生的数据,如 QTcpSocket 、 QUdpSocket 、 QBuffer 、
    QFile 、 QProcess 等类的数据。可以使用 QDataStream 在 QAbstractSocket 一端写数据,在另一
    端使用 QDataStream 读取数据,这样就免去了烦琐的高低字节转换工作。如果需要读取原始数
    据,则可以使用 readRawdata()函数读取数据并保存到预先定义好的 char*缓冲区,写原始数据
    使用 writeRawData()函数。读写原始数据需要对数据进行编码和解码。*/
        file.setFileName("binary.dat");
        if(!file. open (QIODevice::ReadOnly))
         {
          qDebug()<< "error!";
          return;
         }
        QDataStream in(&file);
        QString name;
        QDate birthday;
        qint32 age;
        in>>name>>birthday>>age;
        qDebug()<< name<<birthday << age<<"岁";
        file. close();
    }
    
    

    四、总结

    Qt5 文件及磁盘处理—— 读写二进制文件会在应用程序开发中经常用到的

  • 相关阅读:
    19-k8s的附加组件-coreDNS组件
    深入高性能NIO框架,Netty权威详解,智能时代构建高可用系统利器
    深度学习环境配置10——Ubuntu下的torch==1.7.1环境配置
    EFCore分表实现
    sync.map 源码学习
    每日LeetCode——Java版(一)
    JKPacket权威指南——JKPacket的特点
    纯Vue实现网页日常任务清单小功能(数据存储在浏览器)
    HTML静态网页作业——我的家乡安庆
    logsim&worldsim&场景库
  • 原文地址:https://blog.csdn.net/weixin_44759598/article/details/127104133