文档操作及串行化知识摘记

在计算机编程中,让对象数据持久性的过程就称之为串行化或序列化。而利用CArchive类可进行串行化操作。


1.CArchive 对象提供了一个类型安全缓冲机制,用于将可序列化对象写入 CFile 对象或从中读取可序列化对象。通常,CFile 对象表示磁盘文件;但是,它也可以是表示“剪贴板”的内存文件(CSharedFile 对象)。

CArchive(CFile*pFile,UINTnMode,int nBufSize=4096,void*lpBuf=NULL );

pFile
CFile对象的 指针。 CFile对象是永久数据的最终的源或目标。
nMode标识
它指定了对象是否从归档文件中装载或存储到文件中去。
nMode参数必须有下列值之一:
l CArchive::load 从归档文件装载数据。CFile只读。
l CArchive::store 把数据保存到归档文件中。允许CFile写操作。
l CArchive::bNoFlushOnDelete 当归档文件析构程序被调用时,防止归档文件自动调用Flush。如果设定了此标识,则在析构程序被调用之前必须负责调用Close函数。如果不这样做,数据就会崩溃。
nBufSize
指定内部文件 缓冲区大小的整数,以 字节计算。注意缺省的缓冲区大小为4096字节。如果例程归档大的对象,使用大一些的缓冲区,即多个文件缓冲区,那么将会提高例程的执行效率。
lpBuf
指向nBufSize大小的提供缓冲区的 指针。如果不指定这个参数,归档文 件从本地堆为归档文件分配一个缓冲区并且当对象被毁弃时,释放缓冲 区。归档文件不能释放一个提供的缓冲区。


2.CDocument::OnNewDocument()     创建一个新文档时程序的消息响应函数,一般用于编写创建新文档时用户对自己文档对象的内容初始化内容。
BOOL CDocument::OnNewDocument()      //清除老文档内容
{
        if (IsModified())
              TRACE0("Warning: OnNewDocument replaces an unsaved document.\n");
        DeleteContents();           //删除原来的内容而不管是否存盘
        m_strPathName.Empty();       // no path name yet
        SetModifiedFlag(FALSE);     // make clean   清除曾经修改过的标记
        return TRUE;
}


3. CObject ::Serialize从档案文件中读取该对象或向档案文件中写入该对象。
virtual void Serialize(CArchive&ar);
throw( CMemoryException);
throw( CArchiveException);
throw( CFileException);
参数:
ar 被 串行化的CArchive对象。



4.【文件/新建】和【文件/打开】菜单项的命令响应函数都是在CWinApp类中提供的。CWinApp类有一个成员变量:m_pDocManager,是指向CDocManager对象的指针,也就是说, CWinApp负责管理文档管理器,而后者有一个文档模板指针链表:m_templateList,用来保存文档模板的指针,即文档管理器负责管理文档模板,而后者又是用来管理文档类、框架类和视类的,始终让这三个对象三位一体,一起为文档服务。


5.如果要使一个类可串行化,可以经过以下五个步骤来实现:
1>从CObject派生类(或从CObject派生的某个类派生);
2>重写Serialize成员函数;
3>使用DECLARE_SERIAL宏(在类声明中)。即DECLARE_SERIAL(class_name)
4> 定义不带参数的构造函数;
5>为类在实现文件中使用IMPLEMENT_SERIAL宏。即IMPLEMENT_SERIAL(class_name,base_class_name,wSchema)



6.

你可能感兴趣的:(文档操作及串行化知识摘记)