Hallo,
ich habe leider ein Problem mit
zLib,
ich möchte mehrere Dateien in ein zip Archiv packen
und benutze dazu folgenden Code.
Soweit so gut, alles läuft ohne Probleme
durch den Compiler, allerdings sind die
so erzeugten Archive offensichtlich defekt,
zumindestens meldet mir das Winrar und Winzip.
Ich habe auch schon die Komponente ZipMaster
probiert, diese wird aus mir unerfindlichen Gründen
allerdings nicht richtig installiert.
Hat Jemand vielleicht eine Idee wie ich das Ganze lösen kann?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
slFile: TStringList;
begin
slFile := TStringList.Create;
try
slFile.add('C:\source\1.txt');
CompressFiles(slFile, 'C:\source\test.zip');
finally
slFile.FRee;
end;
end;
procedure CompressFiles(Files : TStrings; const Filename : String);
var
infile, outfile, tmpFile : TFileStream;
compr : TCompressionStream;
i,l : Integer;
s : String;
begin
if Files.Count > 0 then
begin
outFile := TFileStream.Create(Filename,fmCreate);
try
{ the number of files }
l := Files.Count;
outfile.Write(l,SizeOf(l));
for i := 0 to Files.Count-1 do
begin
infile := TFileStream.Create(Files[i],fmOpenRead);
try
{ the original filename }
s := ExtractFilename(Files[i]);
l := Length(s);
outfile.Write(l,SizeOf(l));
outfile.Write(s[1],l);
{ the original filesize }
l := infile.Size;
outfile.Write(l,SizeOf(l));
{ compress and store the file temporary}
tmpFile := TFileStream.Create('tmp',fmCreate);
compr := TCompressionStream.Create(clNone,tmpfile);
try
compr.CopyFrom(infile,l);
finally
compr.Free;
tmpFile.Free;
end;
{ append the compressed file to the destination file }
tmpFile := TFileStream.Create('tmp',fmOpenRead);
try
outfile.CopyFrom(tmpFile,0);
finally
tmpFile.Free;
end;
finally
infile.Free;
end;
end;
finally
outfile.Free;
end;
DeleteFile('tmp');
end;
end;