leer-compound-streams-csharp-openmcdf

OpenMCDF Biblioteca para trabajar con archivos CDF en C#

OpenMCDF es una biblioteca para .NET que nos permite trabajar con archivos de formato Compound Document File (CDF) desde una aplicación escrita en C#.

OpenMCDF proporciona una forma de leer y escribir archivos CDF desde aplicaciones escritas en C#. Permite realizar operaciones como extraer datos de archivos CDF, modificar archivos existentes y crear nuevos archivos CDF desde cero.

Algunas de sus características son:

  • Soporta operaciones de lectura/escritura en flujos y almacenamientos.
  • Permite recorrer de la estructura del árbol de los archivos.
  • Cumple con las versiones 3 y 4 de las especificaciones CDF.
  • Utiliza lazy loading siempre que sea posible para reducir el uso de memoria.
  • Ofrece una API intuitiva para trabajar con archivos estructurados.

Archivos CDF

Los archivos CDF, también conocidos como almacenamiento estructurado de OLE, son un formato de fichero binario utilizado por muchas aplicaciones. Por ejemplo:

  • Todos los documentos creados por Microsoft Office hasta la versión de 2007
  • Los mensajes .msg de Outlook
  • Los archivos de caché de miniaturas de Windows (thumbs.db)
  • Los archivos .suo de Visual Studio (opciones de solución) también son archivos compuestos
  • Muchas herramientas de edición de audio/video (*.aaf, por ejemplo).

Los archivos CDF son esencialmente contenedores que pueden almacenar varios tipos de datos, como texto, imágenes, objetos incrustados, metadatos, y más. La ventaja de los archivos CDF es que permiten que múltiples componentes de datos se almacenen y gestionen en un solo archivo, lo que facilita el transporte y el intercambio de información de manera más eficiente.

La estructura jerárquica de un archivo CDF se compone de dos elementos principales:

  • Streams: Son los bloques de datos individuales que contienen información específica, como texto, imágenes, objetos incrustados, etc. Cada stream tiene un nombre único que lo identifica dentro del archivo.

  • Storages: Son contenedores que pueden contener otros streams o almacenamientos. Estos permiten organizar la información en una estructura de árbol. Los almacenamientos pueden ser anidados, lo que significa que un almacenamiento puede contener otros almacenamientos y streams.

Cómo usar OpenMCDF

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.

Install-Package OpenMCDF

Aquí tenéis algunos de cómo utilizar OpenMCDF extraídos de la documentación de la librería

Crear un nuevo archivo compuesto

byte[] b = new byte[10000];

CompoundFile cf = new CompoundFile();
CFStream myStream = cf.RootStorage.AddStream("MyStream");

myStream.SetData(b);
cf.Save("MyCompoundFile.cfs");
cf.Close();

Abrir un archivo existente y obtener un flujo de datos

String filename = "report.xls";
CompoundFile cf = new CompoundFile(filename);
CFStream foundStream = cf.RootStorage.GetStream("Workbook");
byte[] temp = foundStream.GetData();
// Hacer algo con 'temp'
cf.Close();

Agregar y eliminar elementos

CompoundFile cf = new CompoundFile();
CFStorage st = cf.RootStorage.AddStorage("MyStorage");
CFStream sm = st.AddStream("MyStream");
// Eliminar un elemento
cf.RootStorage.Delete("AStream"); // Se asume que existe.

Persistir cambios

cf.RootStorage.AddStream("MyStream").SetData(buffer);
cf.Commit();

Compresión de un archivo compuesto

CompoundFile.ShrinkCompoundFile("MultipleStorage_Deleted_Compress.cfs");