Compartir por


Uso de los operadores << y >> de CArchive

CArchive proporciona << operadores y >> para escribir y leer tipos de datos simples, así como CObjecthacia y desde un archivo.

Para almacenar un objeto en un archivo a través de un archivo

  1. En el ejemplo siguiente se muestra cómo almacenar un objeto en un archivo a través de un archivo:

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

Para cargar un objeto a partir de un valor almacenado previamente en un archivo

  1. En el ejemplo siguiente se muestra cómo cargar un objeto de un valor almacenado anteriormente en un archivo:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

Normalmente, se almacenan y cargan datos hacia y desde un archivo a través de un archivo en las funciones Serialize de clases derivadas de CObject, que debe haber declarado con la macro DECLARE_SERIALIZE. Se pasa una referencia a un objeto CArchive a tu función Serialize. Llama a la IsLoading función del CArchive objeto para determinar si se ha llamado a la Serialize función para cargar datos desde el fichero o almacenar datos en el fichero.

La Serialize función de una clase derivada serializable CObjectnormalmente tiene la siguiente forma:

void CSerializableObj::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
   {
      // TODO:  add storing code here
   }
   else
   {
      // TODO:  add storing code here
   }
}

La plantilla de código anterior es exactamente la misma que la que AppWizard crea para la función Serialize del documento (una clase derivada de CDocument). Esta plantilla de código te ayuda a escribir código que es más fácil de revisar, ya que el código de almacenamiento y el código de carga siempre deben ser paralelos, como en el ejemplo siguiente:

void CEmployee::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
      archive << m_strName << m_wAge;
   else
      archive >> m_strName >> m_wAge;
}

La biblioteca define los << operadores y >> para CArchive como el primer operando y los siguientes tipos de datos y tipos de clase como segundo operando:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTime y CTimeSpan
Double

DWORD
Float
Int
LONG

POINT y CPoint
RECT y CRect
SIZE y CSize
WORD

Nota:

Almacenar y cargar CObjects a través de un archivo requiere una atención especial. Para obtener más información, consulta Almacenar y cargar CObjects a través de un archivo.

Los operadores CArchive<< y >> siempre devuelven una referencia al objeto CArchive, que es el primer operando. Esto te permite encadenar los operadores, como se muestra a continuación:

archive << m_strName << m_wAge;

Consulte también

Serialización: Serializar un objeto