Qt QDataStream二进制文件读写

QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频等。

QDataStream既能够存取 C++ 基本类型,如 int、char、short 等,也可以存取复杂的数据类型,例如自定义的类。实际上,QDataStream对于类的存储,是将复杂的类分割为很多基本单元实现的。结合QIODevice,QDataStream可以很方便地对文件、网络套接字等进行读写操作。
代码实现如下:
mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"
#include<QDataStream>
#include<QFile>
#include<QFileDialog>
#include<QDebug>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"  //这样写可以方便地定位错误
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}

MyWidget::~MyWidget()
{
    delete ui;
}


void MyWidget::on_Button_open_clicked()
{
    QString path=QFileDialog::getOpenFileName(this,"open_File","../08_QDataStream","*.*");
    if(!path.isEmpty())
    {
        //创建文件对象
        QFile file(path);
        //打开文件,只读方式
        bool isOK=file.open(QIODevice::ReadOnly);
        if(isOK)
        {
            //创建数据流,和file文件关联
            QDataStream stream(&file);
            //读的时候,按写的顺序取数据
            QString str;
            int a;
            stream>>str>>a;
            //qDebug()<<str.toUtf8().data()<<a;
            cout<<str.toUtf8().data()<<a;

        }

        //关闭文件
        file.close();

    }

}

void MyWidget::on_Button_save_clicked()
{


    QString path= QFileDialog::getSaveFileName(this,"save_File","../08_QDataStream","TXT(*.txt)");
    if(!path.isEmpty())
    {
        //QFile file(path);
        QFile file;
        file.setFileName(path);


        //打开方式,只写
        bool isOK=file.open(QIODevice::WriteOnly);
        if(isOK)
        {
            //创建数据流,和file文件关联
            QDataStream stream(&file);
            //获取编辑区内容
            QString str=ui->textEdit->toPlainText();
            //往数据流中写数据,相当于往文件中写数据
            stream<<str<<666;

        }
        file.close();

    }

}


发布了241 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/105012587