当前位置: 首页 > web >正文

【上位机——MFC】序列化机制

相关类

CFile-文件操作类,封装了关于文件读写等操作
CFile::Open
CFile::Write/Read
CFile::Close
CFile::SeekToBegin / SeekToEnd / Seek

代码示例

#include <afxwin.h>
#include <iostream>using namespace std;void File() {CFile file;file.Open("E:/MFC/MFCDay02/file.txt",CFile::modeCreate | CFile::modeReadWrite);char str[] = "hello file";file.Write(str,strlen(str));file.SeekToBegin();char buf[256] = { 0 };long nLen = file.Read(buf,256);cout << buf << ' ' << nLen << endl;}int main() {File();return 0;
}

序列化机制的作用

以二进制流形式读写硬盘文件,但效率很高。

CFile文件操作类,完成硬盘文件的读写操作。
CArchive-归档类,完成内存数据的读写操作。

序列化变量

序列化机制的使用

  1. 创建或打开文件 CFile::Open
  2. 定义归档类对象 CArchive ar
  3. 数据序列化 ar << 数据
  4. 关闭归档类对象 ar.Close()
  5. 关闭文件 CFile::Close();

反序列化机制的使用

  1. 打开文件 CFile::Open
  2. 定义归档类对象 CArchive ar
  3. 数据反序列化 ar >> 变量
  4. 关闭归档类对象 ar.Close()
  5. 关闭文件 CFile::Close();

代码示例

#include <afxwin.h>
#include <iostream>using namespace std;//序列化
void Store() {CFile file;file.Open("E:/MFC/MFCDay02/serial.txt", CFile::modeCreate | CFile::modeWrite);CArchive ar(&file, CArchive::store,4096);long age = 18;ar << age;float score = 88.5;ar << score;CString name = "zhangsan";ar << name;ar.Close();file.Close();}//反序列化
void Load() {CFile file;file.Open("E:/MFC/MFCDay02/serial.txt", CFile::modeRead);CArchive ar(&file, CArchive::load, 4096);long age;ar >> age;float score;ar >> score;CString name;ar >> name;cout << "age " << age << " score " << score <<" name "<< name << endl;}int main() {//Store();Load();return 0;
}

序列化对象的使用

  1. 类必须派生自CObject
  2. 类内必须添加声明宏 DECLARE_SERIAL(theClass)
  3. 类外必须添加实现宏 IMPLEMENT_SERIAL(theClass,baseClass,1)
  4. 类必须重写虚函数Serialize
    当类具备上述三个要件后,类对象就可以序列化到文件中保存了。
#include <afxwin.h>
#include <iostream>using namespace std;//1.类必须派生自CObject
class CMyDoc :public CDocument {//2.类内必须添加声明宏 DECLARE_SERIAL(theClass)DECLARE_SERIAL(CMyDoc)public:CMyDoc(int age = 0, float score = 0.0, CString name = "") :m_age(age), m_score(score), m_name(name) {};int m_age;float m_score;CString m_name;//4.类必须重写虚函数Serializevirtual void Serialize(CArchive& ar);};
//3.类外必须添加实现宏 IMPLEMENT_SERIAL(theClass,baseClass,1)
IMPLEMENT_SERIAL(CMyDoc,CDocument,1)void CMyDoc::Serialize(CArchive& ar) {if (ar.IsStoring()) {ar << m_age << m_score << m_name;}else {ar >> m_age >> m_score >> m_name;}
}void Store() {CFile file;file.Open("E:/MFC/MFCDay02/serial.txt", CFile::modeCreate | CFile::modeWrite);CArchive ar(&file, CArchive::store, 4096);CMyDoc data(18, 88.5, "zhangsan");ar << &data;ar.Close();file.Close();}void Load() {CFile file;file.Open("E:/MFC/MFCDay02/serial.txt", CFile::modeRead);CArchive ar(&file, CArchive::load, 4096);CMyDoc* pdata = NULL;ar >> pdata;ar.Close();file.Close();cout << pdata->m_age <<' ' << pdata->m_score << ' ' << pdata->m_name << endl;
}int main() {//Store();Load();return 0;
}
http://www.xdnf.cn/news/4413.html

相关文章:

  • 使用 pgrep 杀掉所有指定进程
  • 【Linux系列】如何区分 SSD 和机械硬盘
  • idea连接mongodb配置schemas
  • 【基础篇】prometheus热更新解读
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的分销价格管控机制研究
  • TCGA数据库临床亚型可用!贝叶斯聚类+特征网络分析,这篇 NC 提供的方法可以快速用起来了!
  • 4G与5G网络频率:技术演进与应用场景解析
  • 认识中间件-以及两个简单的示例
  • WebRTC通信原理与流程
  • 矩阵系统源码搭建 UI 设计开发指南,支持OEM
  • C#对SQLServer增删改查
  • 支持向量机
  • 2025数字中国创新大赛-数字安全赛道数据安全产业积分争夺赛决赛Writeup
  • JumpServer批量添加资产
  • linux环境openssh升级到openssh-10.0p1
  • RabbitMQ如何保证消息不丢失?
  • 【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II
  • 什么是 token-level 嵌入
  • JVM局部变量表和操作数栈的内存布局
  • C24-数组
  • MedCLIP-SAMv2 实验计划
  • DevExpressWinForms-AlertControl-使用教程
  • 【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术
  • 深入探讨 UDP 协议与多线程 HTTP 服务器
  • python-71-基于pyecharts的通用绘图流程
  • 路由器NAT回流踩坑
  • 边缘计算:开启智能新时代的“秘密武器”
  • 性能比拼: HTTP/2 vs. HTTP/3
  • 基于大模型的输卵管妊娠全流程预测与治疗方案研究报告
  • MCP连接Agent:AI时代的TCP/IP