subcarpetas - ¿Cómo puedo comprimir un directorio de archivos usando C++?
descomprimir tar.gz ubuntu (6)
He encontrado las siguientes dos bibliotecas:
- ZipIOS ++ . Parece ser C ++ "puro". No enumeran a Windows explícitamente como una plataforma compatible. Así que creo que deberías probar tu suerte tú mismo.
- QuaZIP . Basado en Qt4. En realidad se ve bien. Enumeran Windows explícitamente (usando mingw). Aparentemente, es un contenedor de C ++ para [esta] biblioteca.
Ah, y por supuesto, he extraído esos sitios de esta pregunta de Qt Mailinglist sobre Zipping / Unzipping de directorios :)
Estoy trabajando en un proyecto usando C ++, Boost y Qt. Entiendo cómo comprimir archivos únicos y corrientes de prueba usando, por ejemplo, la función qCompress () en Qt.
¿Cómo puedo comprimir un directorio de varios archivos, incluidos los subdirectorios? Estoy buscando una solución multiplataforma (Mac, Win, Linux); Prefiero no disparar un montón de procesos nuevos.
¿Existe una forma estándar de combinar las corrientes de prueba de múltiples archivos en un archivo comprimido, o tal vez hay una función o método de conveniencia que estaría disponible en la biblioteca Boost iostream?
Muchas gracias por la ayuda.
Actualización : la biblioteca QuaZip se ve realmente genial. Hay un ejemplo en el paquete de descarga (en el directorio "tests") que muestra muy claramente cómo comprimir un directorio de archivos.
Actualización 2 : Después de completar esta tarea en mi entorno de compilación de Linux, descubrí que QuaZip no funciona en absoluto con el compilador de Visual Studio. Es posible abordar todos los errores del compilador, pero una palabra de advertencia para cualquiera que mire este camino.
system("zip myarchive.zip *");
Para que conste...
Hoy, necesitaba hacer algo muy similar en Visual C ++. (Aunque quería mantener la posibilidad de compilar el proyecto en otras plataformas, sin embargo, prefirió no adoptar Qt solo para este fin).
Terminó usando la biblioteca Minizip . Está escrito en C simple, pero idear un envoltorio simple de C ++ era muy sencillo, y el resultado final funciona muy bien, al menos para mis propósitos.
Probé QuaZIP 0.4.3 en Windows con VisualStudio 2010, todavía hay problemas, pero se pueden resolver fácilmente.
Para construir con VS:
- Use CMake para configurar y generar una solución VS para QuaZIP.
- Solución abierta con VS y compilación: primero notará que no puede encontrar ''zlib.h''.
- Abra las preferencias para el proyecto quazip y agregue la ruta a la copia de Qt de Zlib a C / C ++ -> General-> Incluir directorios adicionales: $ (QTDIR) / src / 3rdparty / zlib.
- Reconstruye nuevamente y obtendrás muchas advertencias y un error C2491: dllimporta un problema estático en QuaZipFile :: staticMetaObject.
- Esto se debe a que QuaZipFile se declara como "clase QUAZIP_EXPORT QuaZipFile" y QUAZIP_EXPORT debe resolverse a Q_DECL_EXPORT para dll y a Q_DECL_IMPORT para la aplicación, en función de si QUAZIP_BUILD está definido o no. Al construir QuaZIP QUAZIP_BUILD debe definirse, pero no es así: el proceso de configuración define en su lugar un error completamente inútil "quazip_EXPORTS".
- Para solucionarlo, simplemente elimine "quazip_EXPORTS" de todas las configuraciones de compilación y agregue QUAZIP_BUILD en su lugar: QuaZIP ahora se compilará correctamente.
He creado una envoltura alrededor de minizip agregando algunas características que necesitaba y haciendo más agradable su uso. ¿Utiliza el último c ++ 11 y está desarrollado con Visual Studio 2013, por lo que debería funcionar de inmediato para usted.
Hay una descripción completa aquí: https://github.com/sebastiandev/zipper
puede comprimir carpetas, secuencias, vectores completos, etc. También una buena característica es hacer todo completamente en memoria.