Dos maneras de crear un objeto CArchive
Hay dos formas de crear un objeto CArchive
:
Creación implícita de un objeto CArchive a través de Framework
La manera más común y sencilla es permitir que el marco cree un objeto CArchive
para el documento en nombre de los comandos Guardar, Guardar como y Abrir en el menú Archivo.
Esto es lo que hace el marco cuando el usuario de la aplicación emite el comando Guardar como desde el menú Archivo:
Presenta el cuadro de diálogo Guardar como y obtiene el nombre de archivo del usuario.
Abre el archivo denominado por el usuario como un objeto
CFile
.Crea un objeto
CArchive
que apunta a este objetoCFile
. Al crear elCArchive
objeto, el marco establece el modo en «almacenar» (escritura, serialización), en lugar de «cargar» (lectura, deserialización).Llama a la función
Serialize
definida en la clase derivada deCDocument
, pasando una referencia al objetoCArchive
.
A continuación, la función Serialize
de tu documento escribe datos en el CArchive
objeto, como se explica en breve. Tras la devolución de tu función Serialize
, el marco destruye el objeto CArchive
y, a continuación, el objeto CFile
.
Por lo tanto, si permites que el marco cree el objeto para el documento CArchive
, todo lo que tiene que hacer es implementar la función del documento Serialize
que escribe y lee en y desde el archivo. También debes implementar Serialize
para cualquier objeto derivado de CObject
que la función del documento Serialize
se serialice directa o indirectamente.
Creación explícita de un objeto CArchive
Además de serializar un documento a través del marco de trabajo, hay otras ocasiones en las que es posible que necesites un objeto CArchive
. Por ejemplo, puede que desees serializar datos hacia y desde el Portapapeles, representado por un objeto CSharedFile
. O bien, puedes usar una interfaz de usuario para guardar un archivo diferente del que ofrece el marco. En este caso, puedes crear explícitamente un objeto CArchive
. Esto se hace de la misma manera que lo hace el marco, con el procedimiento siguiente.
Para crear explícitamente un objeto CArchive
Construye un objeto
CFile
o un objeto derivado deCFile
.Pasa el objeto
CFile
al constructor paraCArchive
, como se muestra en el ejemplo siguiente:CFile theFile; theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite); CArchive archive(&theFile, CArchive::store);
El segundo argumento para el constructor
CArchive
es un valor enumerado que especifica si el archivo se usará para almacenar o cargar datos en o desde el archivo. La funciónSerialize
de un objeto comprueba este estado llamando a la funciónIsStoring
para el objeto de archivo.
Cuando hayas terminado de almacenar o cargar datos en el objeto CArchive
o desde él, ciérralo. Aunque los objetos CArchive
(y CFile
) cerrarán automáticamente el archivo (y el archivo), es recomendable hacerlo explícitamente, ya que facilita la recuperación de errores. Para obtener más información, consulta el artículo Excepciones: detección y eliminación de excepciones.
Para cerrar el objeto CArchive
En el ejemplo siguiente se muestra cómo utilizar la expresión
CArchive
:archive.Close(); theFile.Close();