Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descomprimir un archivo gzip con Delphi (https://www.clubdelphi.com/foros/showthread.php?t=83001)

jplj 01-05-2013 19:52:12

Descomprimir un archivo gzip con Delphi
 
Hola:

Buscando una forma limpia(1) de comprimir / descomprimir un archivo -si puede ser más de uno mejor, pero no imprescindible- he encontrado este post de Seaone, que realiza la primera parte: La compresión.

Quizá sea "sencillo", pero ¿cómo podría implementar la función inversa?

Decir por último que uso Delphi 7.

Muchas gracias de antemano.

(1) Limpia:
.- Sin dll externas, tal como ocurre con 7-zip
.- Sin requerir componentes extras, como abrevia, jcl, ...

Ñuño Martínez 07-05-2013 20:17:02

El no requerir bibliotecas externas lo veo complicado. De todas formas, el algoritmo de descompresión que usa gzip es libre de patentes (bueno, y su compresión también desde hace pocos años, si no recuerdo mal) así que siempre puedes escribirlo tu. :rolleyes:

Free Pascal incluye compresión y descompresión de corrientes (TStream) con algoritmo gzip. Creo que usa bibliotecas externas, pero no estoy del todo seguro, y nada te impide echarle un ojo a su código fuente que puedes descargar desde aquí. Concretamente en ./packages/paszlib/src/zstream.pp. Con suerte puede que compile en Delphi sin (muchos) cambios, aunque te prevengo de que tiene bastantes dependencias.

Ah, y recuerda que gzip únicamente comprime los datos, no empaqueta ficheros. Para empaquetar ficheros se usa, normalmente, TAR. Free Pascal también incluye la creación de archivos TAR vía corrientes. Busca ./packages/fcl-base/src/libtar.pp.

jplj 09-05-2013 20:15:57

Hola:

Muchas gracias por tus comentarios.

Cuando hablaba de bibliotecas externas, me refería a dll,s que tuvieran que acompañar al ejecutable en la instalación; pero evidentemente no me propongo reinventar la rueda :)

En la función que Seaone propone para comprimir en formato gzip utiliza zlib, y sería utilizando zlib o similar como pretendo realizar la descompresión.

He encontrado esta interfaz de zlib para Delphi que incluye ZLibExGZ.pas, aunque aún no he tenido tiempo para probarlo, me parece que puede resolver mi problema.

Un saludo.

Al González 09-05-2013 20:38:07

Desde Delphi XE2 lo puedes hacer sin bibliotecas externas al ejecutable. Básicamente enlaza archivos .obj que pertenecen a la biblioteca ZLib.

Agrego: Supongo que no sería muy complicado adaptar las unidades System.Zip y System.ZLib de XE2 a Delphi 7.

jplj 09-05-2013 20:41:54

Muchas gracias, pero tal como decía al principio uso Delphi 7 :(

Al González 09-05-2013 20:45:54

Me quedé pensando en esta idea:
Cita:

Empezado por Al González (Mensaje 460145)
Agrego: Supongo que no sería muy complicado adaptar las unidades System.Zip y System.ZLib de XE2 a Delphi 7.

¿Creen que valdría la pena intentarlo? :)

nlsgarcia 09-05-2013 22:02:09

Al González,

Cita:

Empezado por Al González
...no sería muy complicado adaptar las unidades System.Zip y System.ZLib de XE2 a Delphi 7...¿Creen que valdría la pena intentarlo?...

Definitivamente si :)

Nelson.

Al González 09-05-2013 22:52:40

Cita:

Empezado por nlsgarcia (Mensaje 460158)
Definitivamente si :)

Pues algo más para la agenda del bibliotecario, a ver qué logro conseguir...:o :)


La franja horaria es GMT +2. Ahora son las 12:33:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi