Harpo   03-09-2024, 20:51
#1
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. Big Grin

Para los interesados en las distintas pruebas:
  1. 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.
  2. 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.
  3. 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.
  4. 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. Big Grin

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.

[Imagen: R0ZnazL.gif]
Archivos adjuntos
.gz
TestUnarr-0.0.1.tar.gz (Tamaño: 748.38 KB Descargas: 4)
crevilla   24-02-2025, 22:45
#2
Hola, para un proyecto necesitaba que el sistema tuviera instalado exiftool para manipular imágenes, con el siguiente código compruebo si está instalado o no e informo al usuario:

Try Shell "exiftool -ver" To sTest
  If Error Or sTest = "" Then
    Message.Error(("Para ejecutar este programa, exiftool debe estar instalado"))
    Return
  Endif

simplemente cambia "exiftool" por la librería que necesites, checando en el manual cuál es la sintaxys correcta para checar la versión de la librería que necesites instalar

Dies ist kein Unterschrift, sondern

 
Shordi   25-02-2025, 11:52
#3
Ta chulo, sí señor. Pero dos cositas:

- Si el programa necesita exiftool, lo que tienes que hacer es añadir la dependencia a la hora de generar el paquete de instalación y así se instalará solo (suponiendo, claro está, que dicho paquete esté en los repositorios del SO)

- Yo ocultaría eso de buscar la portada y descomprimir bajo un sólo botón "Ver". Sólo tienes que buscar el "cover" o el ".jpg" o lo que tengas normalizado y mostrarlo sin más. Luego un click sobre la portada y se descomprime y muestra... Más simple para el usuario y más elegante, creo.

Aún así, ta chulo.

Saludos

No podemos regresar
tincho   04-03-2025, 10:57
#4
interesante programa, gracias por compartirlo.

1 Saludo.
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.