PDA

Ver la Versión Completa : Clase TZipFile, para comprimir y descomprimir archivos


Al González
23-10-2012, 08:58:19
Hola.

Hoy estuve revisando algunas de las novedades de Delphi XE2, llamando mi atención una clase nativa de nombre TZipFile cuyo propósito es permitir la creación de archivos comprimidos ZIP, así como la extracción del contenido de ese tipo de archivos.

Después de hacer unas pruebas con esta clase, consideré que valdría la pena mostrarles el código, para quien pudiera servirle:

Uses
System.Zip;

Procedure TForm1.Button1Click(Sender: TObject);
Var
Zip :TZipFile;
Begin
{ Creamos un archivo ZIP de nombre "Prueba.zip", comprimiendo dentro de
él los archivos Carta.txt y Dibujo.bmp }

Zip := TZipFile.Create;

Try
Zip.Open ('C:\Delphi\Ejemplos\TZipFile\Prueba.zip', zmWrite);
Zip.Add ('C:\Delphi\Ejemplos\TZipFile\Carta.txt');
Zip.Add ('C:\Delphi\Ejemplos\TZipFile\Dibujo.bmp');
Finally
Zip.Free;
End;
End;

procedure TForm1.Button2Click(Sender: TObject);
Var
I :Integer;
Zip :TZipFile;
Begin
{ Abrimos el archivo Prueba.zip y mostramos dentro de Memo1 el nombre de
los archivos comprimidos que contiene }

Zip := TZipFile.Create;

Try
Zip.Open ('C:\Delphi\Ejemplos\TZipFile\Prueba.zip', zmRead);
Memo1.Clear;

For I := 0 To High (Zip.FileNames) Do
Memo1.Lines.Add (Zip.FileNames [I]);
Finally
Zip.Free;
End;
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
Zip :TZipFile;
Begin
{ Extraemos en el directorio C:\Delphi\Ejemplos\TZipFile los archivos que
están dentro de Prueba.zip }

Zip := TZipFile.Create;

Try
Zip.Open ('C:\Delphi\Ejemplos\TZipFile\Prueba.zip', zmRead);
Zip.ExtractAll('C:\Delphi\Ejemplos\TZipFile');
Finally
Zip.Free;
End;
End;

Por cierto, encontré este artículo (http://neftali.clubdelphi.com/?p=1752) de nuestro buen amigo Germán Estévez, en donde explica con mucho mayor detalle esta característica.

Saludos.

Al González.

Casimiro Notevi
23-10-2012, 10:24:40
Gracias por la aportación :)

Ñuño Martínez
23-10-2012, 11:31:49
No está mal. :)

En Free Pascal existen dos unidades (libtar y zstream) con clases cuya combinación permiten manejar archivos .tar, .gz y .tar.gz. La diferencia está en que, en estos casos, son derivadas de la clase TStream, por lo que no son simples contenedores y no tienen que ser, necesariamente, ficheros de disco (por ejemplo, puede usarse para acceso a redes). Claro que, por lo poco que sé, con el formato PKZIP no debe ser fácil usar TStream.

Me pregunto si estas unidades (libtar y zstream) pueden usarse en Delphi.

cloayza
23-10-2012, 14:21:50
Me pregunto si estas unidades (libtar y zstream) pueden usarse en Delphi.

Solo existe una manera de salir de la duda...:confused:

Saludos

dec
23-10-2012, 15:52:11
Solo existe una manera de salir de la duda...:confused:

Saludos

Tal vez sean las mismas unidades que usan en los componentes Turbo Power Abbrevia (http://tpabbrevia.sourceforge.net/)... desde luego dichos "formatos" están soportados, y, por otro lado, me suenan a mí dichas unidades...

Casimiro Notevi
23-10-2012, 16:34:28
Eso iba a decir, que "así visto/leido" parece Abbrevia :)

Al González
23-10-2012, 20:02:58
[...] Me pregunto si estas unidades (libtar y zstream) pueden usarse en Delphi.

Si compilan en Free Pascal / Lazarus, no veo por qué no pudieran adaptarse a Delphi. :)

Por otra parte, revisando más a fondo la clase TZipFile, veo que ésta hace uso de la biblioteca ZLib (http://es.wikipedia.org/wiki/Zlib), trabajo original de Jean-loup Gailly y Mark Adler, al que contribuyeron Borland, Base2 Technologies y Roberto Della Pasqua para importarla a Delphi.

Como curiosidad, en el código de esta nueva clase podemos encontrar ejemplos de algunas de las características más "recientes" del compilador y la RTL, como:


tipos de datos de clase
campos de clase
genéricos
diccionarios
métodos anónimos
ámbitos de unidades (conocidos como "espacios de nombres" en otros lenguajes)
función nativa ReturnAddress
constructores de clase
destructores de clase


Se me hace agua la boca. ^\||/

Si tan solo el IDE fuera tan amable, armónico y estable como el de Delphi 7...pero bueno, esos tiempos tardarán en volver y no ayuda quedarse a esperarlos sin hacer nada.

Ñuño Martínez
23-10-2012, 21:01:54
Tal vez sean las mismas unidades que usan en los componentes Turbo Power Abbrevia (http://tpabbrevia.sourceforge.net/)... desde luego dichos "formatos" están soportados, y, por otro lado, me suenan a mí dichas unidades... Pues por lo que he leído, no son las mismas clases, aunque los formatos sí están soportados.

Si compilan en Free Pascal / Lazarus, no veo por qué no pudieran adaptarse a Delphi. :)¡Hay tantas cosas que funcionan en Free Pascal y no en Delphi! Mi envolvente para la biblioteca Allegro, sin ir más lejos. :rolleyes:

Si tan solo el IDE fuera tan amable, armónico y estable como el de Delphi 7...pero bueno, esos tiempos tardarán en volver y no ayuda quedarse a esperarlos sin hacer nada. Ya sabes lo que dice la canción:

"Echar la vista atrás es bueno, a veces.
Mirar hacia delante es vivir sin temor."

Aunque creo que no se refería a lo mismo. ¿O sí?

roman
23-10-2012, 21:17:36
Mi envolvente para la biblioteca Allegro

Tendría que ser envoltura. Envolvente (http://lema.rae.es/drae/?val=envolvente) es un adjetivo ;)

// Saludos

Ñuño Martínez
25-10-2012, 12:56:00
Tendría que ser envoltura. Envolvente (http://lema.rae.es/drae/?val=envolvente) es un adjetivo ;)

// Saludos

Bueno... sí... Es que es "unidad envolvente"... o algo... ¿cuela o no cuela? :rolleyes:

roman
25-10-2012, 16:26:18
Vale, cuela :p. De todas formas, no me gusta eso de envoltura. Preferiría interfaz, quizá.

// Saludos

Casimiro Notevi
26-10-2018, 19:51:08
Hola
Crea un hilo nuevo, gracias.

Al González
27-10-2018, 02:50:12
Crea un hilo nuevo, gracias.
¿Ya lo creó? Pa' seguir leyendo... :-)