2011-08-30 5 views
8

¿Hay una biblioteca para crear archivos zip (zip file format no gzip o cualquier otro formato de compresión) sobre la marcha (para que pueda comenzar a enviar el archivo mientras está compresión) para archivos muy grandes (4 Gb y superiores).Librería de compresión sobre la marcha en C para transmisión

La relación de compresión no es muy importante (principalmente archivos de medios).

La biblioteca debe tener una interfaz c y funcionar en Debian y OSX.

+0

¿Qué sistema operativo está buscando? – karlphillip

+0

@karlphillip Perdón por eso. Debian y el soporte de OSX son necesarios. –

Respuesta

4

libarchive es compatible con cualquier formato que querer, sobre la marcha e incluso archivos en la memoria.

+0

Parece muy prometedor. Lo verificará. –

3

zlib soporta compresión por trozos. Debería poder comenzar a enviar un pequeño fragmento justo después de comprimirlo, mientras la biblioteca todavía está comprimiendo el siguiente fragmento. (Ver this example)

(por desgracia, la tabla de archivos se almacena al final del archivo zip, por lo que el archivo no se podrá utilizar hasta que se haya completado en el lado receptor)

+0

¿Tenía la impresión de que zlib no puede manejar archivos zip? Consulte http://www.zlib.net/zlib_faq.html#faq11 –

+1

No es cierto acerca de los archivos zip, el directorio se agrega al final para simplificar el acceso aleatorio, pero las entradas del archivo se escriben de forma secuencial. El directorio al final es solo por conveniencia. –

+0

@DanielW: ese mismo enlace de Preguntas frecuentes apunta a 'contrib/minizip' que crea archivos zip usando zlib, por lo que obviamente puede hacerlo. – Hasturkun

1

Si bien esta pregunta es antigua y ya está respondida, notaré una nueva solución potencial para aquellos que encuentran esto.

necesitaba algo muy similar, una biblioteca portátil y muy pequeña que crea archivos ZIP de forma de streaming en C. Al no encontrar nada de lo que se ajustaba perfectamente creé uno que utiliza zlib, disponible aquí:

https://github.com/CTrabant/fdzipstream

Ese código solo depende de zlib y básicamente proporciona una interfaz simple para crear archivos ZIP. Lo más importante (para mí), la salida se puede transmitir a una tubería, un zócalo, lo que sea, ya que la secuencia de salida no necesita ser buscable. El código es muy pequeño, un solo archivo fuente y un archivo de encabezado. Funciona en OSX y Linux, y probablemente en otros lugares. Espero que ayude a alguien más que a mí ...

Cuestiones relacionadas