Implementación de archivos IStorage-Compound
La implementación de archivos compuestos de IStorage permite crear y administrar substorages y secuencias dentro de un objeto de almacenamiento que resida en un objeto de archivo compuesto. Para crear un objeto de archivo compuesto y obtener un puntero de IStorage , llame a la función de API StgCreateStorageEx. Para abrir un objeto de archivo compuesto existente y obtener su puntero de IStorage raíz, llame a StgOpenStorageEx.
Las aplicaciones que usan almacenamiento compuesto deben registrarse en HKEY_CLASSES_ROOT\SystemFileAssociations y deben proporcionar sus propios controladores de propiedades. Para obtener más información, vea la sección "Registrar verbos y otra información de asociación de archivos" del registro de aplicaciones.
Casos en los que se debe usar
La mayoría de las aplicaciones usan esta implementación para crear y administrar almacenamientos y flujos.
Métodos
-
Crea y abre un objeto de secuencia con el nombre especificado incluido en este objeto de almacenamiento. El nombre no debe superar los 31 caracteres de longitud (sin incluir el terminador de cadena). Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::CreateStream no admite los comportamientos siguientes:
- No se admite la marca STGM_DELETEONRELEASE.
- No se admite el modo de transacción (STGM_TRANSACTED) para los objetos de secuencia.
- No se admite la apertura de la misma secuencia más de una vez desde el mismo almacenamiento. La marca STGM_SHARE_EXCLUSIVE modo de uso compartido debe especificarse en el parámetro grfMode .
-
Abre un objeto de secuencia existente dentro de este objeto de almacenamiento mediante los modos de acceso especificados en el parámetro grfMode . Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::OpenStream no admite el siguiente comportamiento:
- Marca de STGM_DELETEONRELEASE.
- Modo de transacción (STGM_TRANSACTED) para objetos de secuencia.
- Abrir la misma secuencia más de una vez desde el mismo almacenamiento. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.
-
Crea y abre un nuevo objeto de almacenamiento con el nombre especificado en el modo de acceso especificado. El nombre no debe superar los 31 caracteres de longitud (sin incluir el terminador de cadena). Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::CreateStorage no admite el siguiente comportamiento:
- Marca de STGM_PRIORITY para almacenamientos que no son raíz.
- Abrir el mismo objeto de almacenamiento más de una vez desde el mismo almacenamiento primario. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.
- Marca de STGM_DELETEONRELEASE. Si se especifica esta marca, la función devuelve STG_E_INVALIDFLAG.
-
Abre un objeto de almacenamiento existente con el nombre especificado en el modo de acceso especificado. Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado. La implementación del archivo compuesto proporcionado por COM del método IStorage::OpenStorage no admite el siguiente comportamiento:
- Marca de STGM_PRIORITY para almacenamientos que no son raíz.
- Abrir el mismo objeto de almacenamiento más de una vez desde el mismo almacenamiento primario. Se debe especificar la marca STGM_SHARE_EXCLUSIVE.
- Marca de STGM_DELETEONRELEASE. Si se especifica esta marca, la función devuelve STG_E_INVALIDFUNCTION.
-
Copia solo los substorages y secuencias de este objeto de almacenamiento abierto en otro objeto de almacenamiento. El parámetro rgiidExclude se puede establecer en IID_IStream para copiar solo substorages o para IID_IStorage copiar solo secuencias.
-
Copia o mueve un substorage o un flujo de este objeto de almacenamiento a otro objeto de almacenamiento.
-
Garantiza que los cambios realizados en un objeto de almacenamiento abierto en modo transaccionado se reflejan en el almacenamiento primario; para un almacenamiento raíz, refleja los cambios en el dispositivo real; por ejemplo, un archivo en el disco. En el caso de un objeto de almacenamiento raíz abierto en modo directo, este método no tiene ningún efecto excepto vaciar todos los búferes de memoria en el disco. En el caso de los objetos de almacenamiento que no son raíz en modo directo, este método no tiene ningún efecto.
La implementación de archivos compuestos proporcionados por COM usa un proceso de confirmación en dos fases a menos que se especifique STGC_OVERWRITE en el parámetro grfCommitFlags . Este proceso de dos fases garantiza la solidez de los datos, en caso de que se produzca un error en la operación de confirmación. En primer lugar, todos los datos nuevos se escriben en un espacio sin usar en el archivo subyacente. Si es necesario, se asigna un nuevo espacio al archivo. Una vez completado este paso, se actualiza una tabla del archivo mediante una operación de escritura de un solo sector para indicar que los nuevos datos se usarán en lugar del antiguo. Los datos antiguos se convierten en espacio libre que se usará en la siguiente operación de confirmación. Por lo tanto, los datos antiguos están disponibles y se pueden restaurar si se produce un error al confirmar cambios. Si se especifica STGC_OVERWRITE, se usa una operación de confirmación de fase única. Para obtener más información sobre las marcas de modo transaccionado, consulte enumeración STGC .
-
Descarta todos los cambios realizados en el objeto de almacenamiento desde la última operación de confirmación.
-
Crea y recupera un puntero a un objeto enumerador que se puede usar para enumerar los objetos de almacenamiento y secuencia contenidos en este objeto de almacenamiento. La implementación del archivo compuesto proporcionado por COM toma una instantánea de esa información. Por lo tanto, los cambios en las secuencias y los almacenamientos no se reflejan en el enumerador hasta que se obtiene un nuevo enumerador.
-
Quita el elemento especificado (substorage o stream) de este objeto de almacenamiento.
-
Cambia el nombre del substorage o la secuencia especificados en este objeto de almacenamiento. Los caracteres 000 a 01f, que actúan como el primer carácter del nombre de la secuencia/almacenamiento, se reservan para uso de OLE. Es una restricción de archivo compuesto, no una restricción de almacenamiento estructurado.
-
Establece las horas de modificación, acceso y creación del elemento de almacenamiento especificado. La implementación del archivo compuesto proporcionado por COM mantiene los tiempos de modificación y cambio de los objetos de almacenamiento internos. Los objetos de almacenamiento raíz admiten lo que sea compatible con el sistema de archivos subyacente (o por ILockBytes). La implementación del archivo compuesto no mantiene ninguna marca de tiempo para secuencias internas. Las marcas de tiempo no admitidas se notifican como cero, lo que permite al autor de la llamada probar el soporte técnico.
-
Asigna el CLSID especificado a este objeto de almacenamiento.
-
Almacena hasta 32 bits de información de estado en este objeto de almacenamiento. El estado establecido por este método es solo para uso externo. La implementación del archivo compuesto proporcionado por COM no realiza ninguna acción en función del estado.
-
Recupera la estructura STATSTG para este objeto de almacenamiento abierto.
Comentarios
Si el objeto de almacenamiento se abre en modo simple, el uso de los métodos anteriores está restringido. Un almacenamiento está en modo simple si se abre con el elemento STGM_SIMPLE especificado en el parámetro grfMode de la función StgCreateStorageEx o StgOpenStorageEx . Para obtener más información sobre los almacenamientos en modo simple, vea Constantes STGM. Si el objeto de almacenamiento en modo simple se obtuvo de la función StgCreateStorageEx , se puede llamar al método CreateStream , pero el método OpenStream no. Si el objeto de almacenamiento en modo simple se obtuvo de la función StgOpenStorageEx , se puede llamar al método OpenStream , pero el método CreateStream no.
Cuando se usa un objeto de almacenamiento en modo simple para crear una secuencia, el tamaño mínimo de esa secuencia suele ser de 4096 bytes. Si se escriben menos datos en la secuencia, el tamaño se redondea hasta 4096 bytes.
Temas relacionados