![]() |
ZLib - komprimieren mehrerer Dateien!
Hallo Leute,
im folgen habe ich ein kleines Codestück angehangen, wo beispielhaft zwei Dateien in ein Archiv gepackt werden sollen. Als Basis hierzu nutze ich ![]()
Delphi-Quellcode:
Zudem eine ergänzende Frage, wenn der Code oben denn mal funktioniert. Gibt es eine Möglichkeit den Inhalt eines Verzeichnis - sprich alle Dateien (ggf. + Unterverzeichnisse) in die TStringList aufzunehmen?
procedure ZLibPacken();
var DateiListe : TStrings; DateiCounter : Integer; Counter : Integer; QuellDatei : TFileStream; QuellDateiName : String; QuellDateiSize : Integer; TempDatei : TFileStream; KompDatei : TZCompressionStream; ZielDatei : TFileStream; begin DateiListe := TStringList.Create; try DateiListe.Add(ExtractFilePath(Application.ExeName)+'a\a.exe'); DateiListe.Add(ExtractFilePath(Application.ExeName)+'a\b.exe'); DateiCounter := DateiListe.Count; ZielDatei := TFileStream.Create(ExtractFilePath(Application.ExeName)+'ziel.dat', fmCreate); ZielDatei.Write(DateiCounter,SizeOf(DateiCounter)); for Counter := 0 to DateiCounter-1 do begin QuellDatei := TFileStream.Create(DateiListe[Counter],fmOpenRead); try // der originale Dateiname QuellDateiName := ExtractFilename(DateiListe[Counter]); QuellDateiSize := Length(QuellDateiName); ZielDatei.Write(QuellDateiSize,SizeOf(QuellDateiSize)); ZielDatei.Write(QuellDateiName[1],QuellDateiSize); // die originale Dateigröße QuellDateiSize := QuellDatei.Size; ZielDatei.Write(QuellDateiSize,SizeOf(QuellDateiSize)); // die originale Datei komprimieren und temporär Speichern TempDatei := TFileStream.Create(ExtractFilePath(Application.ExeName)+'a\ziel.tmp', fmCreate); KompDatei := TZCompressionStream.Create(TempDatei,zcNone); // zcNone, zcFastest, zcDefault, zcMax try KompDatei.CopyFrom(QuellDatei,QuellDateiSize); finally KompDatei.Free; TempDatei.Free; end; //-> // die komprimierte Datei an die Zieldatei anhängen TempDatei := TFileStream.Create(ExtractFilePath(Application.ExeName)+'a\ziel.tmp', fmOpenRead); try ZielDatei.CopyFrom(TempDatei,0); finally TempDatei.Free; end; finally QuellDatei.Free; end; end; finally ZielDatei.Free; DateiListe.Free; DeleteFile(ExtractFilePath(Application.ExeName)+'ziel.tmp'); end; end; Viele Grüße, PP |
Re: ZLib - komprimieren mehrerer Dateien!
Kannst du bitte delphi Tags nehmen? Da bricht man sich ja sonst die Augen!
Die ZLib kann nur Daten packen, hat kennt aber keine Verzeichnisse oder Dateien. Dafür bemüht man andere Tools wie z.B. tar und packt dann die große Datei mit der zlib. |
Re: ZLib - komprimieren mehrerer Dateien!
Ich bin ein Trottel... sorry! Aber so blöd wie ich muss man erstmal sein! :stupid: Die ZielDatei wurde einfach ins falsche Verzeichnis geschrieben!
Aber die letzte Frage ist noch immer aktuell... :wall: Peinliche Grüße, PP |
Re: ZLib - komprimieren mehrerer Dateien!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 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