2008-11-06 12 views
10

Busco un envoltorio que destila a zlib:C++ multiplataforma zlib simplifer-envoltorio

  1. OpenZipFile()
  2. GetItemInfo (n)
  3. UnzipItem (n) // Los puntos de bonificación para descomprimir recursivamente si el elemento n es un directorio.

Veo una gran cantidad de envoltorios alrededor de la biblioteca zlib en, por ejemplo, codeproject.com pero todos ellos son específicos de la plataforma con el fin de proporcionar la funcionalidad específica de la plataforma adicional de descomprimir a archivo/búfer de memoria/tubería.

+0

Así que ya haya encontrado un proyecto sobre CodeProject que hace lo que quiere, lo único que queda por lo que debes hacer es: FILE * file = fopen (filename, "wb"); fwrite (buf, buf_len, 1, archivo); fclose (archivo); –

Respuesta

8

En el archivo fuente de zlib, hay una contribución llamada "minizip".

"minizip" es un conjunto de archivos que puede usar para jugar con archivos .zip. los servicios básicos que necesita ya están allí:

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

Por supuesto, esto no es orientado a objetos (y estoy seguro de que ese no era el objetivo de la c reator of minizip), pero escribir un envoltorio orientado a objetos simple debería ser fácil.

+0

¡Guau, los archivos tienen 8 años! jejeje! – leeand00

+0

Está en cvs; bueno, sí, supongo que eso es lo que tenían para el control de versiones en ese entonces ... – leeand00

+1

¡Oye, no me importa si tiene 8 años, si todavía compila, lo usaré! – leeand00

2

Puede tratar de obtener el código de otro proyecto de FOSS. ScummVM, por ejemplo, tiene un contenedor Zlib altamente portátil (implementation, header) con todas las funciones que necesita, más una capa OO para interactuar genéricamente con cualquier otro tipo de archivo.

¿Quizás sea un buen punto de partida? Las funciones de envoltura son totalmente independientes y portátiles (diablos, incluso funcionan en una Nintendo DS), pero la capa OO depende de muchas clases personalizadas que pueden ser difíciles de agregar a su propio proyecto.

2

firstobject's easy zlib permanece multiplataforma; tiene zlib en un solo archivo easyzlib.c y expone solo las funciones ezcompress y ezuncompress con la función adicional de determinar los requisitos de memoria antes de asignar el tamaño exacto.

11

En boost :: iostreams existe la posibilidad de utilizar los formatos zlib, gzip y bzip2.

le resulta a partir http://www.boost.org/

+0

boost :: iostream :: zlib_compressor no es compatible con el formato zip real –

1

GZStream es digno de una mirada. Esta es una bonita envoltura de plataforma cruzada alrededor de ZLib que extiende las clases STL iostream.

http://www.cs.unc.edu/Research/compgeom/gzstream/

Lo que es bueno acerca de este envoltorio sobre algunos de los otros es que si se trabaja con archivos muy grandes que no es necesario cargar todo el conjunto de datos en la memoria.

+0

¡Oye, se ve bien! 7 años ... Trataré de compilarlo. – craesh

1

Si va a utilizar minizip - preste atención, la versión enviada con zlib 1.2.3 tiene una limitación de archivo zip resultante de 2 GB. IT producirá zip con tamaño> 2GB, pero no podrá abrirlos ...