Contenedores: Archivos compuestos
En este artículo se explican los componentes y la implementación de archivos compuestos y las ventajas y desventajas del uso de archivos compuestos en las aplicaciones OLE.
Los archivos compuestos son una parte integral de OLE. Se usan para facilitar la transferencia de datos y el almacenamiento de documentos OLE. Los archivos compuestos son una implementación del modelo de almacenamiento estructurado activo. Existen interfaces coherentes que admiten la serialización en un almacenamiento, una secuencia o un objeto de archivo. Las clases COleStreamFile
y COleDocument
de la biblioteca MFC (Microsoft Foundation Class) admiten los archivo compuestos.
Nota:
El uso de un archivo compuesto no implica que la información proceda de un documento OLE o de un documento compuesto. Los archivos compuestos son solo una de las formas de almacenar documentos compuestos, documentos OLE y otros datos.
Componentes de un archivo compuesto
La implementación OLE de archivos compuestos usa tres tipos de objeto: objetos de secuencia, objetos de almacenamiento y objetos ILockBytes
. Estos objetos son similares a los componentes de un sistema de archivos estándar de las siguientes maneras:
Los objetos de secuencia, como los archivos, almacenan datos de cualquier tipo.
Los objetos de almacenamiento, como los directorios, pueden contener otros objetos de almacenamiento y secuencia.
Los objetos
LockBytes
representan la interfaz entre los objetos de almacenamiento y el hardware físico. Determinan cómo se escriben los bytes reales en cualquier dispositivo de almacenamiento al que tenga acceso el objetoLockBytes
, como un disco duro o un área de memoria global. Para más información sobre los objetosLockBytes
y la interfaz deILockBytes
, vea Referencia del programador de OLE.
Ventajas y desventajas de los archivos compuestos
Los archivos compuestos proporcionan ventajas que no están disponibles con los métodos anteriores de almacenamiento de archivos. Entre ellas, las siguientes:
Acceso incremental a archivos.
Modos de acceso a archivos.
Normalización de la estructura de archivos.
Se deben tener en cuenta las posibles desventajas de los archivos compuestos (problemas con su gran tamaño y de rendimiento relacionados con el almacenamiento en disquetes) al decidir si se deben usar en la aplicación.
Acceso incremental a archivos
El acceso incremental a los archivos es una ventaja automática del uso de archivos compuestos. Dado que un archivo compuesto se puede ver como un "sistema de archivos dentro de un archivo", se puede acceder a tipos de objeto individuales, como secuencia o almacenamiento, sin necesidad de cargar todo el archivo. Esto puede reducir drásticamente el tiempo que una aplicación necesita para acceder a nuevos objetos para que el usuario los edite. La actualización incremental, basada en el mismo concepto, ofrece ventajas similares. En lugar de guardar todo el archivo solo para guardar los cambios realizados en un objeto, OLE guarda solo el objeto de secuencia o de almacenamiento editado por el usuario.
Modos de acceso a archivos
La capacidad de determinar cuándo se confirman los cambios en los objetos de un archivo compuesto en el disco es otra ventaja del uso de archivos compuestos. El modo en el que se accede a los archivos, ya sea mediante transacción o directo, determina cuándo se confirman los cambios.
El modo de transacción usa una operación de confirmación en dos fases para realizar cambios en los objetos de un archivo compuesto, manteniendo disponibles las copias nueva y antigua del documento hasta que el usuario decide guardar o deshacer los cambios.
El modo directo incorpora los cambios en el documento a medida que se realizan, sin la capacidad de deshacerlos después.
Para más información sobre los modos de acceso, vea Referencia del programador de OLE.
Normalización
La estructura estandarizada de archivos compuestos permite que diferentes aplicaciones OLE examinen los archivos compuestos creados por la aplicación OLE sin conocimiento de la aplicación que realmente creó el archivo.
Consideraciones sobre el tamaño y el rendimiento
Debido a la complejidad de la estructura de almacenamiento de los archivos compuestos y la capacidad de guardar datos de forma incremental, los archivos que usan este formato tienden a tener un mayor tamaño que otros archivos que usan el almacenamiento no estructurado o "archivos planos". Si la aplicación carga y guarda archivos con frecuencia, el uso de archivos compuestos puede hacer que el tamaño del archivo aumente mucho más rápidamente que los archivos no compuestos. Dado que los archivos compuestos pueden ser grandes, el tiempo de acceso de los archivos almacenados y cargados desde disquetes también puede verse afectado, lo que da lugar a un acceso más lento a los archivos.
Otro problema que afecta al rendimiento es la fragmentación de archivos compuestos. El tamaño de un archivo compuesto viene determinado por la diferencia entre los sectores primero y último del disco usados por el archivo. Un archivo fragmentado puede contener muchas áreas de espacio libre que no contienen datos, pero se cuentan al calcular el tamaño. Durante la vigencia de un archivo compuesto, estas áreas se crean mediante la inserción o eliminación de objetos de almacenamiento.
Uso del formato de archivos compuestos para los datos
Después de crear correctamente una aplicación que tiene una clase de documento derivada de COleDocument
, asegúrese de que el constructor de documentos principal llama a EnableCompoundFile
. Cuando el Asistente para aplicaciones crea aplicaciones contenedoras OLE, esta llamada se inserta automáticamente.
En la Referencia del programador OLE, consulte IStream, IStorage e ILockBytes.
Consulte también
Contenedores
Contenedores: Problemas de la interfaz de usuario
COleStreamFile (clase)
COleDocument (clase)