Luego de indagar en diversos repositorios y sitios webs de internet finalmente descubrimos la respuesta que te compartiremos más adelante.
Solución:
Sí, lo hace bien. (Pero si alguna vez no le gusta el código C, debería mirar el SDK de 7-zip que tiene código en C++ y C#).
- Todas las funciones para navegar y descomprimir los archivos de un archivo zip están en
unzip.h
- Todas las funciones para comprimir y agregar archivos a un archivo zip están en
zip.h
(ver contribminizipunzip.h y contribminizipzip.h)
Por ejemplo, descomprimiendo: el unzOpen()
funciones de su archivo zip devuelve un unzFile
entonces usa unzGoToFirstFile()
y unzGoToNextFile()
en este unzFile
para navegar a través de todos los archivos en el archivo.
luego obtienes la información del archivo para cada archivo con unzGetCurrentFileInfo()
es decir, por su tamaño,
seguramente deberías llamar unzOpenCurrentFile()
en algún momento
y llama unzReadCurrentFile()
usando el tamaño de la información del archivo, recuperando el contenido binario del archivo archivado.
opcionalmente, hay una estructura opaca que puede proporcionar para usar su propia función de E/S, pero obviamente, hay una implementación predeterminada de win32 para el acceso a los archivos, por lo que ni siquiera podría preocuparse por eso.
PD: y no olvides llamar unzCloseCurrentFile()
.
De: http://www.zlib.net/zlib_faq.html#faq11: 11. ¿Puede zlib manejar archivos .zip?
No por sí mismo, no. Consulte el directorio contrib/minizip en la distribución de zlib.
No hay un tutorial allí, pero la fuente minizip zip.c es exactamente para IO (así que presumiblemente compresión y descompresión) en archivos zip usando zlib.
Y todavía no hay tutorial PERO http://www.winimage.com/zLibDll/minizip.html da más detalles.
He construido un envoltorio alrededor de minizip agregando algunas características que necesitaba y haciéndolo más agradable de usar. Utiliza el último C++ 11 y está desarrollado con Visual Studio 2013 (debería ser portátil, pero no lo he probado en Unix)
Hay una descripción completa aquí: https://github.com/sebastiandev/zipper
puede comprimir carpetas enteras, flujos, vectores, etc. También una buena característica es hacer todo completamente en la memoria.
Eres capaz de añadir valor a nuestro contenido informacional aportando tu experiencia en las explicaciones.