网上看到别人实现,自己小试了一下
要存储的类定义如下:
/***********************Myclass.h**********************************/
class CMyclass
{
public:
CMyclass(void);
virtual ~CMyclass(void);
public:
CString xuehao;//学号
CString xingming;//姓名
void Serialize(CArchive& ar);
};
/************************Myclass.cpp*********************************/
#include "StdAfx.h"
#include "./myclass.h"
CMyclass::CMyclass(void)
{
}
CMyclass::~CMyclass(void)
{
}
void CMyclass::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar <<xuehao <<xingming;
}
else
{
ar >>xuehao >>xingming;
}
}
/************************使用*********************************/
class CCArchiveClassDlg : public CDialog
{
.......................
public:
CEdit m_editctrl1;
CEdit m_editctrl2;
CMyclass m_information;
afx_msg void OnBnClickedBnSave();
afx_msg void OnBnClickedBnOpen();
..................
};
void CCArchiveClassDlg::OnBnClickedBnSave()
{
// TODO: 在此添加控件通知处理程序代码
CString str1;
CString str2;
this->m_editctrl1.GetWindowText(str1);
this->m_editctrl2.GetWindowText(str2);
this->m_information.xuehao = str1;
this->m_information.xingming = str2;
CFile file;
if(file.Open("123",CFile::modeCreate|CFile::modeWrite))
{
CArchive ar(&file,CArchive::store);
this->m_information.Serialize(ar);
//脱离与文件的关联
ar.close();
//关闭文件,顺序不能颠倒,会出错的
file.close();
}
else
{
MessageBox("打开文件失败!");
}
}
void CCArchiveClassDlg::OnBnClickedBnOpen()
{
// TODO: 在此添加控件通知处理程序代码
CString str1;
CString str2;
CFile file;
if(file.Open("123",CFile::modeRead))
{
CArchive ar(&file,CArchive::load);
m_information.Serialize(ar);
//脱离与文件的关联
ar.close();
//关闭文件,顺序不能颠倒,会出错的
file.close();
this->m_editctrl1.SetWindowText(m_information.xuehao);
this->m_editctrl2.SetWindowText(m_information.xingming);
}
else
{
MessageBox("打开文件失败!");
}
}
其实不必弄个Serialize函数在这儿,直接用CArchive函数输入输出,可这样封装一下的确省了一点,不用每次对把要存储的类成员变量存储一遍,还是有点用