MFC序列化和反序列化

class A
{
public:
	int num;
};


void FileSerialize(CString fileName)
{
	CFile file;
	if(file.Open(fileName, CFile::modeCreate|CFile::modeWrite) == FALSE)
	{
		return;
	}

	CArchive ar(&file,CArchive::store);
	int num;	
	ar << num;
	ar.Close();
	file.Close();
}

void FileDeserialize(CString fileName, A a)
{
	CFile file;
	if(file.Open(fileName, CFile::modeRead) == FALSE)
	{
		return;
	}
	CArchive ar(&file, CArchive::load);
	ar >> a.num;
	ar.Close();
	file.Close();

}

在非document / view结构中,要实现文件的序列化和反序列化非常容易,只许自己实例化CArchive,代码见下:

class A使我们要实例化的类


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软提供的一套用于开发Windows桌面应用程序的C++类库。在MFC中,序列(Serialization)是指将对象的状态转换为可以存储或传输的格式,而序列(Deserialization)则是将存储或传输的数据恢复为对象的状态。 MFC提供了一些类和宏来支持序列序列操作,主要涉及以下几个类: 1. CObject类:所有支持序列MFC类都继承自CObject类。它提供了一些虚拟函数,如Serialize用于实现对象的序列序列操作。 2. CArchive类:用于创建和操作存储或传输数据的存档文件。CArchive类提供了Serialize函数,用于将对象的状态写入存档文件或从存档文件中读取对象的状态。 3. CFile类:用于对文件进行读写操作。它提供了Open、Read、Write等函数来操作文件。CArchive类可以使用CFile类来读写数据。 下面是一个简单的示例代码,演示了如何在MFC中进行序列序列操作: ```cpp // 假设有一个自定义的类MyData,需要支持序列序列 class MyData : public CObject { public: int m_value; // 实现Serialize函数来进行对象的序列序列操作 void Serialize(CArchive& ar) { if (ar.IsStoring()) // 写入数据 ar << m_value; else // 读取数据 ar >> m_value; } }; // 序列操作 void SerializeData() { CFile file(_T("data.dat"), CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); MyData data; data.m_value = 42; data.Serialize(ar); // 将对象的状态写入存档文件 ar.Close(); file.Close(); } // 序列操作 void DeserializeData() { CFile file(_T("data.dat"), CFile::modeRead); CArchive ar(&file, CArchive::load); MyData data; data.Serialize(ar); // 从存档文件中读取对象的状态 ar.Close(); file.Close(); // 使用序列后的对象... int value = data.m_value; } ``` 在上述示例中,Serialize函数根据ar对象的状态进行读写操作,将m_value成员变量的值进行序列序列。通过创建CFile和CArchive对象,可以实现对存档文件的读写操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值