Ciao,
sto guardando il mio vecchio progetto. Non ne ricordo il motivo (è passato qualche anno), ma per la compressione usavo un antro componente: http://tpabbrevia.sourceforge.net/ (http://tpabbrevia.sourceforge.net/)
Questa è la procedura che avevo fatto per zippare:
{Serve per zippare
PathFilesDaZippare contiene la directory relativa, in modo che, se passata, il file
finale non conterrà tutta l'alberatura per arrivare alla directory salvata,
ma solo la directory stessa
}
procedure Zippa(var NomeFileZip:String; FilesDaZippare:String; PathFilesDaZippare:String = ''; VFEstensioneAutomatica:Boolean = True);
begin
//Se è il caso, aggiungo l'estensione al nome del file
if VFEstensioneAutomatica then begin
if (UpperCase(ExtractFileExt(NomeFileZip)) <> UpperCase(ExtZip)) then begin
NomeFileZip:=NomeFileZip + ExtZip;
end;
end;
//Cancello il file se già esiste
if (FileExistsUTF8(NomeFileZip)) then begin
DeleteFileUTF8(NomeFileZip);
end;
AbZipper1:=TAbZipKit.Create(nil);
try
try
with AbZipper1 do begin
ArchiveType:=atZip;
ForceType:=True;
StoreOptions:=[soRecurse];
CompressionMethodToUse:=smBestMethod;
FileName:=NomeFileZip;
if (PathFilesDaZippare <> '') then begin
BaseDirectory:=PathFilesDaZippare;
end;
Addfiles(FilesDaZippare,0);
CloseArchive;
end;
except
on E: Exception do ShowMessage('Zip non riuscito: ' +
LineEnding +
E.Message +
LineEnding +
NomeFileZip +
LineEnding +
FilesDaZippare);
end;
finally
FreeAndNil(AbZipper1);
end;
end;
Questa era la sua chiamata:
Zippa(NomeFileDest, GetAllFilesMask, DirDest, False);
Ciao, Mario
Ciao,
scusa il ritardo ma sono un po' incasinato al lavoro. Io il pacchetto non l'ho onstallato, ma aggiungo queste alla uses:
AbArcTyp,
AbUnzPrc,
AbUtils ,
AbZipTyp,
AbZipKit,
Per visualizzare l'elenco dei files contenuti in uno zip, tempo fa' ho fatto questo:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs,
StdCtrls, AbZBrows, BonMarUtils;
type
{ TForm1 }
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
const NomeFileZip='C:\_______SalvataggiEsportazione\P1PW_20110930091530_AF_____Ultimo fatto con AMFGS32 vecchio.zip';
var AbZipBrowser:TAbZipBrowser;
Idx:Integer;
begin
//Emetto l'elenco dei files contenuti in un file zip con qualche informazione accessoria
Memo1.Lines.Clear;
AbZipBrowser:=TAbZipBrowser.Create(nil);
try
AbZipBrowser.OpenArchive(NomeFileZip);
for Idx:=0 to AbZipBrowser.Count - 1 do begin
if (not AbZipBrowser.Items[Idx].IsDirectory) then begin
Memo1.Lines.Add(RiempiStringa(MettiPunti(Idx), 3, '0', rsPrima) +
' - ' +
MyDateTimeToStr(AbZipBrowser.Items[Idx].LastModTimeAsDateTime) +
' - ' +
RiempiStringa(MettiPunti(AbZipBrowser.Items[Idx].UncompressedSize), 10, ' ' , rsPrima) +
' - ' +
AbZipBrowser.Items[Idx].DiskFileName);
end;
end;
finally
FreeAndNil(AbZipBrowser);
end;
end;
end.
Ciao, Mario
mmm.
Devo guardare i sorgenti ... ma ad occhio stai facendo una spece di TAR ... zfe.CompressionLevel:=clnone;
Non saprei, a me lo trova sotto AbArcTyp.pas.
property IsDirectory: Boolean
read GetIsDirectory;
Magari dipende dall'ordine con cui hai messo le uses. Prova magari a mettere AbZBrows per prima.
Ciao, Mario