.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();