![]() |
Probleme mit zLib (beschädigte Archive)
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; |
Re: Probleme mit zLib (beschädigte Archive)
Bist du dir denn sicher, daß die Datenstrukturen von WinZIP gelesen werden können? PKZIP hat IIRC irgendeine Art von Filetable am Ende des Datenstroms gespeichert, diese müsstest du nachbilden (auf
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz