3d网站建设制作,企业公示信息年报,深圳设计之都,西安网站建设开发查派文章目录 Serialize对于存储文件的序列化 Serialize
Serialize 是一个在 MFC (Microsoft Foundation Classes) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化#xff0c;便于在不同的场景中保存、传输和恢复对象的状态。
在 MFC 中#xff0c;Serialize 函数… 文章目录 Serialize对于存储文件的序列化 Serialize
Serialize 是一个在 MFC (Microsoft Foundation Classes) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化便于在不同的场景中保存、传输和恢复对象的状态。
在 MFC 中Serialize 函数通常是在派生自 CObject 的类中实现的。通过重写 Serialize 函数可以定义如何将对象的数据转换成二进制格式序列化以及如何将二进制数据还原为对象的状态反序列化。 以下是一个基本示例 void CMyObject::Serialize(CArchive ar)
{if (ar.IsStoring()){// 将对象的数据写入存档ar m_member1;ar m_member2;// ...}else{// 从存档中读取数据并恢复对象的状态ar m_member1;ar m_member2;// ...}
}在上述示例中如果 CArchive 的存储模式为存储IsStoring 返回 true则将对象的数据写入存档否则在加载模式下IsStoring 返回 false从存档中读取数据并恢复对象的状态。 通过使用 Serialize 函数您可以方便地将对象的状态保存到磁盘文件、数据库或网络流中以及从这些介质中恢复对象的状态。 对于存储文件的序列化
CModeItem.h
class CModeItem :public CObject
{//添加序列号功能DECLARE_SERIAL(CModeItem)
public:CModeItem();~CModeItem();//序列号函数void Serialize(CArchive ar);CString m_sModeName;//姓名int m_nAge;//年龄CString m_sSex;//性别int m_nSize;//用来存储指针的大小
};//CTypedPtrArray 是 MFC 中的一个模板类用于存储指针的动态数组。
//CObArray 是 MFC 中的另一个类它是一个基于指针的对象数组可以用来存储任意类型的指针
typedef CTypedPtrArray CObArray, CModeItem* CModeItems;CModeItem.cpp
#include pch.h
#include CModeItem.h
IMPLEMENT_SERIAL(CModeItem, CObject, 1 )
//IMPLEMENT_SERIAL 是一个在 MFC 中使用的宏用于简化类的序列化实现。
//IMPLEMENT_SERIAL 宏用于在派生自 CObject 的类中实现对象的序列化。
//通过使用该宏您可以自动生成 Serialize 函数的实现代码而无需手动编写。
//IMPLEMENT_SERIAL(class_name, base_class_name, schema_version)//class_name要实现序列化的类的名称。//base_class_name基类通常为 CObject的名称。//schema_version序列化模式的版本号用于支持向后兼容性。CModeItem::CModeItem()
{m_sModeName _T();m_nAge 0;m_sSex _T();m_nSize sizeof(CModeItem);}CModeItem::~CModeItem()
{
}void CModeItem::Serialize(CArchive ar)
{UINT uVer 1;CString sTag _T();//用来存储更多的标志便于扩展//CArchive::IsLoading或CArchiv::IsStoreing来确定存档是正在加载还是正在存储。//Serialize由CArchive ::ReadObject和CArchive::WriteObject调用。//这些函数与C存档插入运算符 和提取运算符 相关联。if (ar.IsLoading)//正在加载{ar uVer m_sModeName m_nAge m_sSex;//提起}else{ar uVer m_sModeName m_nAge m_sSex;//插入}
}theApp.h theApp.cpp
int CSerializeDemoApp::InitData()
{TCHAR exeFullPath[MAX_PATH];GetModuleFileName(NULL, exeFullPath, MAX_PATH);m_sRunPath exeFullPath; //当前运行路径SetCurrentDirectory(m_sRunPath);int iFind m_sRunPath.ReverseFind(\\);if (-1 ! iFind){m_sRunPath m_sRunPath.Left(iFind);CreateDirectory(m_sRunPath _T(\\Log), NULL);CreateDirectory(m_sRunPath _T(\\sys), NULL);CreateDirectory(m_sRunPath _T(\\DATA), NULL);}//lpszSection要读取的配置文件的节section名称。//lpszEntry要读取的配置文件中的条目entry名称。//nDefault如果无法找到指定的配置文件或条目则返回的默认值。m_nCurMode GetProfileInt(_T(学生信息), _T(当前学生), 0);LoadMode();return 0;
}int CSerializeDemoApp::LoadMode(void)
{RemoveAllMode();CString sFile m_sRunPath _T(\\sys\\mode.student);CFile oFile;if (oFile.Open(sFile, CFile::modeRead)){CString sClass,nID;//以后可能要扩展的CArchive ar(oFile, CArchive::load);try {m_oModes.Serialize(ar);}catch (...){}ar.Close();oFile.Close();}return 0;
}int CSerializeDemoApp::RemoveAllMode(void)
{for (int n m_oModes.GetSize() - 1; n 0; --n){delete m_oModes[n];}m_oModes.RemoveAll();return 0;
}int CSerializeDemoApp::SaveMode(void)
{CString sFile m_sRunPath _T(\\sys\\mode.student);CFile oFile;if (oFile.Open(sFile, CFile::modeWrite | CFile::modeCreate)){CString sClass, nID;//以后可能要扩展的CArchive ar(oFile, CArchive::store);try {m_oModes.Serialize(ar);}catch (...){}ar.Close();oFile.Close();}return 0;
}