PDA

Ver la Versión Completa : generar archivos rar o zip


johurgi
05-06-2008, 08:45:42
Hola a todos,

Estoy realizando en mi aplicacion un modulo que tiene que coger una carpeta y meterla en un archivo .rar o .zip. El problema es que no se como hacerlo. He probado con el componente de abbrevia, pero el tiempo que tarda en generar el fichero es demasiado elevado.

Agradeceria cualquier tipo de ayuda.

un saludo

duilioisola
05-06-2008, 10:47:40
Con ShellExecute y el WinRAR instalado podrías hacerlo.
Yo utilizo esto en un .bat, pero podría servirte.


rem Esto mete dentro de Backup.rar el contenido completo de Carpeta, Carpeta2 y Carpeta3.
"C:\Archivos de programa\WinRAR\WinRAR.exe" a -r Backup.rar "C:\Carpeta\*.*"
"C:\Archivos de programa\WinRAR\WinRAR.exe" a -r Backup.rar "C:\Carpeta2\*.*"
"C:\Archivos de programa\WinRAR\WinRAR.exe" a -r Backup.rar "C:\Carpeta3\*.*"

johurgi
05-06-2008, 10:50:42
esta opcion ya la habia contemplado, no me acaba de gustar por que cuando distribuya la aplicacion o instalo el winrar o nada de nada.

De todas formas gracias por tu respuesta.

duilioisola
05-06-2008, 10:59:11
Mira esta página (http://www.programmersheaven.com/zone2/cat56/index.htm) y esta otra (http://www.torry.net/pages.php?id=301) .Hay un montón de componentes.

Mira también esta discusión (http://www.clubdelphi.com/foros/showthread.php?t=27719&highlight=comprimir)... talvez el componente tenga alguna opción para comprimir más o menos y de eso dependa la velocidad.

johurgi
05-06-2008, 11:23:15
Gracias por tu ayuda voy a probar con lo que he leido en el hilo y te comento.

johurgi
05-06-2008, 15:14:03
con el codigo del hilo que me has dicho me ha funcionado perfectamente lo unico que le he cambiado una de las opciones para que me valla mas rapido.


deflationOption:=doSuperFast;


gracias por tu ayuda.

Un saludo.

Delfino
05-06-2008, 20:07:10
Puedes hacerlo sin ningun componente externo pq Delphi tiene la unidad ZLib q puedes usar sus funciones para tal fin..

Faust
06-06-2008, 01:04:55
Precisamente el lunes hice un programilla que respaldaba automáticamente unos datos y los guardaba en un zip, con opciones de insertar comentarios, contraseña y crear sfx, todo esto compatible con WinZip, usé unas unidades que tengo hace tiempo (ya ni me acuerdo de donde las saqué), pero no recuerdo si son freeware, de ser así las pongo por aquí, en cuanto a lo de la unidad ZLIB de Delphi, ya leí un poco y no doy como usarla.

BlueSteel
06-06-2008, 04:51:14
Puedes hacerlo sin ningun componente externo pq Delphi tiene la unidad ZLib q puedes usar sus funciones para tal fin..

podrias dar un ejemplo de como utilizar esta libreria....

Salu2:p:D

johurgi
06-06-2008, 08:10:38
Danos algun tipo de ejemplo, ya que es otra opcion que no conocia, y seria muy interesante ver como funciona.

manolop
06-06-2008, 09:11:19
yo utilzo el TZipmaster y este sería un ejemplo....


Zip.Dll_Load;

zip.FSpecArgs.Append('*.*');

zip.RootDir:=directorio_proyecto;
if fdestino<>'' then
Zip.ZipFilename :=fdestino //fichero q creara


Zip.AddOptions := Zip.AddOptions + [AddRecurseDirs, AddDirNames];

try
Zip.Add;
except
on exception do
begin
Cursor:=crDefault;
Application.MessageBox('Falló la compresión',PAnsiChar(Main.get_nombre_aplicacion),mb_iconError+mb_OK);
end;
end;
Zip.Dll_Load;


Espero que te sirva, un saludo

johurgi
06-06-2008, 09:20:08
el zipmaster es un componente gratuito???, y donde lo puedo conseguir??

manolop
06-06-2008, 09:34:48
Es gratuito y lo tienes en

http://www.delphizip.org/index.html

Delfino
07-06-2008, 07:57:44
Las funciones de la libreria hablan por si mismo, pero googleando encontre este ejemplo, q se puede personalizar..
program ZLibTest;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, ZLib;
var
FileName: String;
CompFileStream: TStream;
CompressionStream: TCompressionStream;
FileStream: TStream;
DecompressionStream: TDecompressionStream;
Buffer: Array[0..4095] of Char;
BufLen: Integer;
begin
if ParamCount < 1 then Halt;
FileName := ParamStr(1);
Write('Compressing ',FileName,' ... ');
FileStream := TFileStream.Create(FileName,fmOpenRead OR fmShareDenyWrite);
CompFileStream := TFileStream.Create(FileName+'.compress',fmCreate);
CompressionStream := TCompressionStream.Create(clDefault,CompFileStream);
CompressionStream.CopyFrom(FileStream,0);
CompressionStream.Free;
CompFileStream.Free;
FileStream.Free;
Writeln('Done');
Write('Decompressing ',FileName,'.compress ... ');
CompFileStream := TFileStream.Create(FileName+'.compress', fmOpenRead OR fmShareDenyWrite);
FileStream := TFileStream.Create(FileName+'.uncompress', fmCreate);
DecompressionStream := TDecompressionStream.Create(CompFileStream);
BufLen := DecompressionStream.Read(Buffer,SizeOf(Buffer));
while BufLen > 0 do
begin
FileStream.Write(Buffer,BufLen);
BufLen := DecompressionStream.Read(Buffer,SizeOf(Buffer));
end;
DecompressionStream.Free;
FileStream.Free;
CompFileStream.Free;
Writeln('Done');
Readln;
end.

Faust
09-06-2008, 17:44:31
De aquí (http://www.brothersoft.com/tzip-64340.html) se puede bajar el componente que vengo usando hace tiempo, hasta ahora no me ha dado problemas, pero hay muchos otros componentes más actuales y poderosos.

Olvidaba decir que es free.