Comunidad Gambas-es
Qué usar para comprimir & descomprimir ficheros? - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Qué usar para comprimir & descomprimir ficheros? (/thread-1770.html)



Qué usar para comprimir & descomprimir ficheros? - Harpo - 26-08-2024

Saludos,

Estoy con una aplicación para gestionar mi librería de cómics digitales, básicamente ficheros comprimidos que contienen imágenes. Para más información aquí.
He llegado a la parte que necesito descomprimirlos y comprimirlos.

Teniendo en cuenta que los cómics pueden estar comprimidos en diferentes formatos, sobre todo zip - rar -tar, he mirado distintas alternativas:
  • Usar el componente gb.Compress. Lo he descartado, en principio solo sirve para ficheros, no directorios.
  • Usar una herramienta de linea de comandos, he probado varias (zip/unzip - rar/unrar - tar - bsdtar - 7z). Busco una que pueda trabajar con todos los formatos sin problemas. De momento la mejor es 7z, descomprime los tres formatos pero no comprime RAR. Y los ficheros que genera se pueden abrir con los lectores estándar de cómics.
  • Usar una librería externa, pero estoy bastante perdido con esta solución, más adelante probaré. He encontrado una que parece ideal: libunarr.
No sé si hay alguna alternativa que no se me haya ocurrido.
Un saludo, Harpo.


RE: Qué usar para comprimir & descomprimir ficheros? - tincho - 26-08-2024

Hola Harpo.
Yo hice esta función para comprimir directorios:
Código:
'' <b>RAD Extension.</b><br>
'' Compresses all the files in a directory into a single zip file. At the moment it works properly only with the zip option

Static Public Function DirZip(sDir As String) As String

  Dim sFile As String
  Dim cmd As String
  Dim uDir As String
  Dim cDir As String

  uDir = File.ParentDir(sDir)
  cDir = Split(sDir, "/")[Split(sDir, "/").Max]

  sFile = sDir & ".zip"
  cmd = "cd '" & sDir & "';zip -jr '" & sFile & "' *.*"

  If cmd <> "" Then
    Shell cmd Wait
  Endif
  If Exist(sFile) Then
    Return sFile
  Else
    Return ""
  Endif

End
Espero que te sirva. Por supuesto hay que tener instalado el paquete zip en el sistema.

Luego esta otra tiene por finalidad leer un texto que se encuentra alojado dentro de un contendor zip
Código:
'' <b>RAD Extension.</b><br>
'' Read a text file inside a zip.
'' strZip is the full path of the zip file
'' strFile is the relative path of the txt file inside the zip

Static Public Function ReadZip(sZip As String, sFile As String) As String

  Dim sData As String

  If Exist(sZip) = True Then
    Shell "unzip -p '" & sZip & "' " & sFile & " 2>&1" To sData
  Endif

  Return sData

End



RE: Qué usar para comprimir & descomprimir ficheros? - Harpo - 27-08-2024

Muchas gracias Tincho,

Mis primeras pruebas fueron con zip/unzip, pero al trabajar con distintos formatos de compresión lo más práctico es una utilidad que sea capaz de manejarlos. De momento la única que he encontrado es 7z, aunque no comprime en formato rar por tema de licencias.

Un saludo, Harpo.


RE: Qué usar para comprimir & descomprimir ficheros? - vuott - 27-08-2024

Yo también sugeriría:
https://gambaswiki.org/wiki/comp/gb.compress
también en combinación con los Componentes:
gb.compress.bzlib2, gb.compress.bzlib y gb.compress.zstd;

y con respecto a los archivos comprimidos de tipo ". zip", también esta página:
https://www.gambas-it.org/wiki/index.php/Comprimere_un_file_in_un_file_compresso_.zip_mediante_le_funzioni_esterne_del_API_di_libzip


RE: Qué usar para comprimir & descomprimir ficheros? - Harpo - 27-08-2024

Muchas gracias Vuott,

Había visto el componente gb.compress y lo he probado pero sirve para comprimir ficheros, no directorios.
También había visto la página de la wiki italiana, me la he guardado como ayuda para cuando me decida a usar la librería externa libunarr.

Un saludo, Harpo.