Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El uso de los operadores CArchive
CArchive proporciona operadores << y >> para escribir y leer tipos de datos simples, así como CObject para escribir y leer desde y hacia un archivo.
Para almacenar un objeto en un archivo mediante un proceso de archivado
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 previamente 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 CArchive objeto a la Serialize función. Llame a la función IsLoading del objeto CArchive para determinar si la función Serialize se ha llamado para cargar datos del archivo o almacenar datos al archivo.
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 Serialize función del documento (una clase derivada de CDocument). Esta plantilla de código le 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 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:
El almacenamiento y la carga de CObjects a través de un archivo requiere una consideración adicional. Para obtener más información, consulta Almacenar y cargar CObjects a través de un archivo.
Los CArchive<< operadores y >> siempre devuelven una referencia al CArchive objeto , que es el primer operando. Esto le permite encadenar los operadores, como se muestra a continuación:
archive << m_strName << m_wAge;