在MFC中将类串行化存储
.h文件如下:
#pragmaonceclassCMyData:publicCObject{public:CPointpt;intm_iData;charbuff[10];public:DECLARE_SERIAL(CMyData)//必须声明此宏CMyData(){}CMyData(intnData,CPointpt1){m_iData=nData;pt=pt1;}virtualvoidSerialize(CArchive&ar);};
.cpp文件内容如下:
#include"stdafx.h"#include"mytest.h"IMPLEMENT_SERIAL(CMyData,CObject,1)//必须包含此宏voidCMyData::Serialize(CArchive&ar){CObject::Serialize(ar);if(ar.IsStoring()){ar<<pt<<m_iData;ar.Write(buff[i],10);}else{ar>>pt>>m_iData;ar.Read(buff[i],10);}}
在调用ar.WriteString后,需再用此方法写入:ar.WriteString(_T("\n"));
调用方法如下:
//写入内容CMyDatad(12,CPoint(1,8));CFilefile(_T("1.txt"),CFile::modeCreate|CFile::modeWrite);//串行化,存储CArchivear(&file,CArchive::store);ar.WriteCount(1);//写入对象个数ar.WriteObject(&d);//写入对象ar.Close();file.Close();//读取内容CFilemFile;if(mFile.Open(_T("1.txt"),CFile::modeRead)==0)return0;charbuf[512];CArchivear(&mFile,CArchive::load);unsignedlonglength=ar.ReadCount();//按写入顺序,读取存储的数据单元个数CMyData*pData;for(inti=0;i<length;i++){//读取一个类信息,同时指针移动到下一个类信息开始pData=(CMyData*)ar.ReadObject(RUNTIME_CLASS(CMyData));cout<<pData->m_iData<<endl;cout<<"x="<<pData->pt.x<<"y="<<pData->pt.y<<endl;}ar.Close();mFile.Close();
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。