Usar los operadores CArchive << y >>
CArchive proporciona << y >> operadores para escribir y leer tipos de datos simples así como s de CObjecten un archivo.
Para almacenar un objeto en un archivo con un archivo
El ejemplo siguiente muestra cómo almacenar un objeto en un archivo con un archivo:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Para cargar un objeto de un valor almacenado previamente en un archivo
El ejemplo siguiente muestra cómo cargar un objeto de un valor almacenado previamente en un archivo:
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
Normalmente, se almacena y carga datos en un archivo con un archivo en las funciones de CObject- clases derivadas de Serialize , que debe tener declarado con la macro de DECLARE_SERIALIZE . Una referencia a un objeto de CArchive se pasa a la función de Serialize . Se llama a la función de IsLoading del objeto de CArchive para determinar si la función de Serialize se ha denominado para cargar datos de archivo o de almacén al archivo.
La función de Serialize de CObjectserializable (la clase derivada tiene normalmente el formato siguiente:
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 anterior de código es exactamente igual que el AppWizard crea para la función de Serialize de documentos (una clase derivada de CDocument). Ayuda de esta plantilla de código escribe código que es más fácil de ver, porque el código que almacena 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 << y operadores de >> para CArchive como el primer operando y los tipos de datos y los tipos de clase siguientes como el segundo operando:
CObject* |
CALIBRE y CSize |
float |
WORD |
CString |
POINT y CPoint |
DWORD |
BYTE |
RECT y CRect |
Double |
LONG |
CTime y CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
Nota
Almacenar y cargar s para CObjectmediante un archivo requiere la consideración adicional.Para obtener más información, vea Almacenar y cargando CObjects mediante un archivo.
Los operadores de CArchive << y de >> siempre devuelven una referencia al objeto de CArchive , que es el primer operando. Esto permite encadenar los operadores, como se muestra a continuación:
archive << m_strName << m_wAge;