序列化是向或从诸如磁盘文件之类的永久存储介质写入或读取对象的过程.序列化非常适用于在程序执行期间或之后需要维护结构化数据(如C ++类或结构)状态的情况.
执行文件处理时,值通常是基本类型(char,short,int,float或double).同样,我们可以一次保存多个值.此技术不包括从类(作为变量)创建的对象.
MFC库对序列化具有高级别的支持.它从CObject类开始,它是大多数MFC类的祖先,它配备了Serialize()成员函数.
让我们通过创建一个新的MFC项目来看一个简单的例子.
第1步 : 删除TODO行并设计对话框,如下面的快照所示.
第2步 : 为所有编辑控件添加值变量.对于提到的Emp ID和Age,值类型是一个整数,如下面的快照所示.
第3步 : 为这两个按钮添加事件处理程序.
步骤4 : 现在让我们添加一个简单的Employee类,我们需要序列化它.以下是头文件中Employee类的声明.
class CEmployee : public CObject { public: int empID; CString empName; int age; CEmployee(void); ~CEmployee(void); private: public: void Serialize(CArchive& ar); DECLARE_SERIAL(CEmployee);};
第5步 : 以下是源(* .cpp)文件中Employee类的定义.
IMPLEMENT_SERIAL(CEmployee, CObject, 0)CEmployee::CEmployee(void) {}CEmployee::~CEmployee(void) {}void CEmployee::Serialize(CArchive& ar) { CObject::Serialize(ar); if (ar.IsStoring()) ar << empID << empName << age; else ar >> empID >> empName >> age;}
第6步 : 这是Save按钮事件处理程序的实现.
void CMFCSerializationDlg::OnBnClickedButtonSave() { // TODO: Add your control notification handler code here UpdateData(TRUE); CEmployee employee; CFile file; file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite); CArchive ar(&file, CArchive::store); employee.empID = m_id; employee.empName = m_strName; employee.age = m_age; employee.Serialize(ar); ar.Close();}
第7步 : 这是Open按钮事件处理程序的实现.
void CMFCSerializationDlg::OnBnClickedButtonOpen() { // TODO: Add your control notification handler code here UpdateData(TRUE); CFile file; file.Open(L"EmployeeInfo.hse", CFile::modeRead); CArchive ar(&file, CArchive::load); CEmployee employee; employee.Serialize(ar); m_id = employee.empID; m_strName = employee.empName; m_age = employee.age; ar.Close(); file.Close(); UpdateData(FALSE); }
第8步 : 编译并执行上面的代码时,您将看到以下输出.
第9步 : 在所有字段中输入信息,然后单击保存并关闭此程序.
第10步 : 它将保存数据.再次运行应用程序并单击"打开".它将加载Employee信息.