• Martes 23 de Abril de 2024, 12:50

Autor Tema:  DeflateStream + FileMode.Append. Problema.  (Leído 1044 veces)

cls71

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
DeflateStream + FileMode.Append. Problema.
« en: Jueves 12 de Agosto de 2010, 07:55 »
0
Hola.
Estoy trabajando con una aplicación que recibe un flujo de datos muy elevado de manera continua.
Esos datos los voy almacenando en memoria en una colección de tipo List.
Cuando la lista alcanza cierto tamaño, grabo su contenido a un fichero y la limpio para liberar memoria.
Y así sucesivamente. (Sería como una grabación por lotes de información).


Para grabar los datos estaba probando con las clases DeflateStream y GZipStream (para comprimir los datos y ahorrar espacio en disco), pero resulta que no funcionan con FileMode.Append.
Sólo puedo acceder al primer lote grabado. (Aunque todos los lotes se van añadiendo al fichero pues éste va aumentando de tamaño a medida que se va grabando).

Supongo que cuando se graba algo con estas clases se añade alguna información clave en la cabecera de los datos para poder descomprimir. Por lo tanto, los datos tendrían que comprimirse y grabarse todos juntos, no por lotes. ¿Es así?

(El proceso funciona bien si primero abro el fichero comprimido, descomprimo, añado los nuevos datos y vuelvo a comprimir + grabar. El problema es que a medida que el fichero crece la tarea es cada vez más costosa. Lo ideal sería que funcionara el Append.).

Si alguien pudiera aclararme este tema del Append con los ficheros comprimidos se lo agradecería.

Saludos

Painkiller

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: DeflateStream + FileMode.Append. Problema.
« Respuesta #1 en: Jueves 12 de Agosto de 2010, 18:00 »
0
la razon por la cual no funciona con FileMode.Append, es exacatmente lo que comentas, ya que un archivo de este tipo es generado con un algoritmo de compresión aplicado al archivo original, para que se puedan comprobar la integridad de datos además se agregan campos como CRC32 los cuales incluso con algunos bytes de diferencia generan un CRC diferente. Como sugerencia: ¿Porque no guardar los datos en archivos comprimidos por fecha-hora en el nombre?