MFC: serialización

Serializationes el proceso de escribir o leer un objeto hacia o desde un medio de almacenamiento persistente, como un archivo de disco. La serialización es ideal para situaciones en las que se desea mantener el estado de los datos estructurados (como clases o estructuras de C ++) durante o después de la ejecución de un programa.

Al realizar el procesamiento de archivos, los valores suelen ser de tipos primitivos (char, short, int, float o double). De la misma manera, podemos guardar individualmente muchos valores, uno a la vez. Esta técnica no incluye un objeto creado a partir de (como variable de) una clase.

La biblioteca MFC tiene un alto nivel de compatibilidad con la serialización. Comienza con la clase CObject que es el ancestro de la mayoría de las clases MFC, que está equipada con una función miembro Serialize ().

Veamos un ejemplo sencillo creando un nuevo proyecto MFC.

Step 1 - Elimine la línea TODO y diseñe su cuadro de diálogo como se muestra en la siguiente instantánea.

Step 2- Agregar variables de valor para todos los controles de edición. Para Emp ID y Age mencionados, el tipo de valor es un número entero, como se muestra en la siguiente instantánea.

Step 3 - Agregue el controlador de eventos para ambos botones.

Step 4- Ahora agreguemos una clase simple de Empleado, que necesitamos serializar. Aquí está la declaración de la clase Empleado en el archivo de encabezado.

class CEmployee : public CObject {
   public:
      int empID;
      CString empName;
      int age;
      CEmployee(void);
      ~CEmployee(void);
   private:

   public:
      void Serialize(CArchive& ar);
      DECLARE_SERIAL(CEmployee);
};

Step 5 - Aquí está la definición de la clase de empleado en el archivo fuente (* .cpp).

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;
}

Step 6 - Aquí está la implementación del controlador de eventos del botón Guardar.

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();
}

Step 7 - Aquí está la implementación del controlador de eventos del botón Abrir.

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);
}

Step 8 - Cuando se compile y ejecute el código anterior, verá el siguiente resultado.

Step 9 - Ingrese la información en todos los campos y haga clic en Guardar y cierre este programa.

Step 10- Guardará los datos. Ejecute la aplicación nuevamente y haga clic en abrir. Cargará la información del empleado.