Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Comprimir con Zipmaster y subcarpetas (https://www.clubdelphi.com/foros/showthread.php?t=86853)

newtron 14-10-2014 13:08:30

Comprimir con Zipmaster y subcarpetas
 
Hola a tod@s.

Normalmente uso Zipmaster para comprimir/descomprimir archivos pero ahora se me plantea la necesidad de comprimir una carpeta que tiene otras carpetas con archivos dentro. He estado echando un vistazo y hace tiempo había un post que se quedó inconcluso en el que Casimiro recomendaba activar la propiedad "AddRecurseDirs" pero nada, lo ejecuto, no da error pero tampoco crea el fichero. La situación es la siguiente:

Tengo estas carpetas:

C:\Carpeta\Carpeta1
C:\Carpeta\Carpeta2
C:\Carpeta\Carpeta3

cada una con sus archivos dentro.

Mi código sería:

Código Delphi [-]
    ZipMaster.ZipFileName := 'C:\TEMP\carpeta.zip';
    ZipMaster.FSpecArgs.Clear;
    ZipMaster.FSpecArgs.Add('C:\Carpeta\*.*');
    try
      ZipMaster.Add;
    except
      raise exception.Create( 'Error al comprimir los archivos.' );
    end;

Como comentaba, teniendo la propiedad "AddRecurseDirs" en True ejecuto esas líneas y no da error pero tampoco crea el fichero.

Saludos

Casimiro Notevi 14-10-2014 13:34:26

Hace años que no uso esto, pero en la documentación pone lo siguiente:

Cita:

How to Use and Store Relative Paths

1) Set the AddOptions to AddRecurseDirs and AddDirNames:
Código Delphi [-]
with ZipMaster1 do
AddOptions := AddOptions + [AddRecurseDirs, AddDirNames];
2) Add a file specification like *.* or *.pas or something like this:
Código Delphi [-]
ZipMaster1.FSpecArgs.Append( '*.*' );
3) Set the RootDir property to the desired base directory, Drive and Directory where the relative path should start.
Código Delphi [-]
ZipMaster1.RootDir :='C:\aBaseDir\AnotherBaseDir';
4) Now do an Add, and you should have the desired result. The Drive ID and Dirname of your base directory will not be stored in the archive.
Código Delphi [-]
ZipMaster1.Add;
NOTE: The reason that demo1 saves whole pathnames is because it's GUI design intentionally stores complete pathnames in the FSpecArgs.

newtron 14-10-2014 13:42:50

Estupendo, así si. ^\||/

Gracias

Casimiro Notevi 14-10-2014 13:45:04

Sí, es así, por ejemplo, si quieres añadir contraseña:
Primero 'limpias' y luego vas añadiendo las opciones que necesites:

Código Delphi [-]
Zip.AddOptions := [];
Zip.AddOptions := Zip.AddOptions + [AddEncrypt];

newtron 14-10-2014 13:53:38

Cita:

Empezado por Casimiro Notevi (Mensaje 483041)
Primero 'limpias' y luego vas añadiendo las opciones que necesites:

Claro... siempre primero hay que "limpiar la era"... :D

Gracias y saludos

radenf 29-10-2014 14:01:07

Excelente aporte Casimiro.
Decidí migrar desde ZipForge a ZipMaster y fue facilísimo gracias a tu ayuda.

Saludos

Casimiro Notevi 29-10-2014 14:09:36

Gracias :)
Solamente seguí este sencillo tutorial

radenf 29-10-2014 15:46:59

Yo seguí el mismo tutorial y sólo con tu código logré dar en el clavo.

Un modesto aporte para quien le interese:
Si en la propiedad OnProgress de ZipMaster añadimos el siguiente código:

Código Delphi [-]
procedure TForm1.ZipMaster1Progress(Sender: TObject; Details: TZMProgressDetails);
begin
ProgressBar1.Position := Details.TotalPerCent;
Application.ProcessMessages;
end;

Podemos ver la progresión de la compresión del archivo o carpeta seleccionada, en un ProgressBar.

Saludos y muchas gracias


La franja horaria es GMT +2. Ahora son las 12:37: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