Uso de los operadores <<
y >>
de CArchive
CArchive
proporciona << operadores y >> para escribir y leer tipos de datos simples, así como CObject
hacia y desde un archivo.
Para almacenar un objeto en un archivo a través de un archivo
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
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 CObject
normalmente 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 CObject
s 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;