CSDN话题挑战赛第2期
参赛话题:学习笔记
欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
前言
本章节会给大家带来Qt5 文件及磁盘处理—— 读写二进制文件的开发实例详解。
一、读写二进制文件概述
QDataStream 类提供了将二进制文件串行化的功能,用于实现 C++基本数据类型,如 char 、short 、 int 、 char*等的串行化。更复杂的串行化操作则是通过将数据类型分解为基本类型来完成的。
二、实例效果
图一
生成的二进制文件,会在相对应工程文件的构建文件内build-xxxx
图二
使用UltraEdit 打开二进制文件
图三
读取二进制文件,转化为字符串和整型,输出到控制台
三、原码解析
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
void fileFun();
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include <QtDebug>
#include <QFile>
#include <QDataStream>
#include <QDate>
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 文件及磁盘处理—— 读写二进制文件会在应用程序开发中经常用到的