Harpo   26-08-2024, 20:25
#1
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.
tincho   26-08-2024, 21:08
#2
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
Última modificación: 26-08-2024, 21:10 por tincho.

1 Saludo.
Harpo   27-08-2024, 10:38
#3
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.
vuott   27-08-2024, 14:04
#4
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..._di_libzip
Última modificación: 27-08-2024, 15:57 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Harpo   27-08-2024, 19:13
#5
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.
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.