CFile、CArchive及Serialize()的关系。

CFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与CArchive类共同使用,支持MFC对象的串行化。

CArchive允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。 当构造一个CArchive对象时,要把它附加给表示一个打开文件的类CFile(或派生类)的对象上。还要指定归档文件将用于装载还是存储。

一个实现了串行化的类一般会在Serialize()函数中调用CArchive类对象ar来对其相关联的CFile进行读写。以下就是一个简单位的例子:

class example : public CObject 
{
DECLARE_SERIAL(CYourClass)                       //很重要一定要加上 
public:

example(){};

virtual void Serialize(CArchive& ar);

void LoadData();

void SaveData();

protected: 
        CString m_strA; 
        int m_iB; 
}; 
在实现文件中: 

#define FileName _T("MyFile")
IMPLEMENT_SERIAL(example, CObject, 1) 

void  example::Serialize(CArchive&   ar) 

        if(ar.IsLoading()) 
        { 
              //从文件中读取数据到内存中,比如 
              ar   > >  m_strA
              ar   > >  m_iB
        } 
        else   if(ar.IsStoring()) 
        { 
              ar   < <  m_strA
              ar   < <  m_iB
        }   


void LoadData()

{

CFile file;

CFileException fe;


if(file.Open(FileName, CFile::typeBinary | CFile::modeRead, &fe))
{
CArchive ar(&file, CArchive::load);
Serialize(ar);

}

}

void SaveData()

{

CFile file;
CFileException fe;

//file exist with read & write permissions
if(file.Open(
FileName, nFlags/*这个参数根据需要设定*/, &fe))
{
CArchive ar(&file, CArchive::store);
Serialize(ar);
}
 

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值