Saludos,
Cómo les comenté en otro mensaje, estoy buscando una solución para gestionar ficheros comprimidos en los formatos Zip, Rar, Tar y 7z, necesito poder descomprimirlos, comprimirlos y listar su contenido. Después de probar 4 soluciones distintas les traigo la cuarta y última, de momento.
Para los interesados en las distintas pruebas:
- Probé el componente gb.Compress, no me sirve ya que solo trabaja con ficheros, no con directorios, y además no soporta todos los formatos.
- La segunda probé utilidades de consola y el comando Shell de Gambas. Concretamente Zip/Unzip, Rar/Unrar y bsdtar. Aunque funcionan bien todas es complicado, cada una tiene su sintaxis y sus formatos de salida. Iba a ser complejo de desarrollar y mantener.
- La tercera fue probar 7z, en teoría soporta todos los formatos y cubre toda la operativa, en la realidad da problemas con el formato Rar. Es un formato propietario y con ese tipo de ficheros da errores al descomprimir y listar. Y no comprime en Rar. Al final usé 7z con Rar/Unrar con buenos resultados aunque volvía al problema de distintas sintaxis y formatos de salida.
- La última ha sido con una librería externa: libunarr. Y sobre esta he desarrollado una clase Gambas para descomprimir y extraer información de ficheros comprimidos en los formatos que necesito.
Sobre la librería comentar que:
- Es una librería diseñada para trabajar con cómics y es utilizada por varias aplicaciones de esa naturaleza.
- No comprime, solo descomprime y lee ficheros comprimidos. Tampoco soporta protección por password ni CRC ni Rar5.
- Necesita tener instaladas libbz2, liblzma y zlib.
Un apunte, la aplicación que he subido lleva embebida la librería, dentro de un directorio "library". Y en la clase que la utiliza:
Código:
Library "./library/libunarr"
Aunque no suele estar instalada yo la tenía en mi ordenador, supongo que instalada junto a alguna de las aplicaciones que uso para gestionar o leer comics. En las primeras pruebas funcionaba correctamente y en un momento dejó de hacerlo, fallaba con el formato 7z. Al final opté por incluirla dentro del programa hasta saber exactamente que ha pasado.
Lo que he subido es una primerísima versión. Descomprime y lee todos los formatos mencionados, la he probado también con ficheros tipo ePub, xlsx, ods y odt.
A tener en cuenta que es mi primera experiencia con
Extern, me he debido leer todos los mensajes sobre el tema de todos los foros de Gambas más la Wiki italiana. El maestro Vuott ha sido mi guía.
Lo que falta:
- Comprobar que el sistema tiene instaladas las librerías necesarias. En esto ando perdido de momento.
- Un control de errores que no hay, y definir códigos de retorno para ampliar la información que devuelve la clase. Por ejemplo cuando intento descomprimir un fichero en Rar5, la librería da un mensaje de "formato no soportado", que se captura en la consola de depuración del IDE. He mirado el código del IDE para ver como lo implementa pero no lo encuentro, si alguien sabe cómo se agradece la ayuda.
- Opción al descomprimir de mantener o sobreescribir los ficheros de salida. O actualizar los más antiguos.
- Filtrar al descomprimir por extensión de ficheros o nombre.
Y no les aburro más, si alguien se decide a probarla se aceptan sugerencias.
Un saludo, Harpo.