总结序列化的心得
CArchive只是一个对象,用于<< >>等方便的操作符重载,跟序列化没有必然联系
CArchive必须和CFile配合使用,而且CArchive的权限和CFILE的权限必须一致,
也就是说如果CArchive可以写,但是CFILE只能读就会出现问题.
任何从Cobject继承的类都可以重载Serialize ,至于里面怎么实现,是你自己的事情.
比如下面这种完全不管CArchive的用法
void
CMyTreeCtrl::Serialize(CArchive
&
ar)
{
if(SAVE == Flag)
{
file.writefile(...)
}
else
{
file.open(...)
}
}
什么时候调用Serialize?
在你认为适当的情况下,Serialize本身只是方法实现,需要被人调用才能实现序列化.
用法比如(某个按钮的响应函数):
//
TODO: Add your control notification handler code here
CFile file;
if
(
0
==
file.Open(
"
Sample.tree
"
,CFile::modeCreate
|
CFile::modeReadWrite))
{
MessageBox("打开文件错误");
return;
}
/* 指明现在的操作是把数据保存到文件 */
CArchive ar(
&
file,CArchive::store);
m_MyTree.Serialize(ar);
ar.Close();
file.Close();