AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ZLib - komprimieren mehrerer Dateien!

Ein Thema von PremiumPils · begonnen am 1. Nov 2004 · letzter Beitrag vom 1. Nov 2004
Antwort Antwort
PremiumPils

Registriert seit: 26. Sep 2004
21 Beiträge
 
Delphi 7 Personal
 
#1

ZLib - komprimieren mehrerer Dateien!

  Alt 1. Nov 2004, 12:46
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 "ZLib 1.1.4". Nun, die Dateien werden wie ich das gesehen habe normal gepackt, jedoch nicht richtig zusammengefügt. Ich denke, im mit "//->" markierten Bereich liegt der Fehler versteckt. Aber ich steh auf dem Schlauch!

Delphi-Quellcode:
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;
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?

Viele Grüße,
PP
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: ZLib - komprimieren mehrerer Dateien!

  Alt 1. Nov 2004, 12:52
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.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
PremiumPils

Registriert seit: 26. Sep 2004
21 Beiträge
 
Delphi 7 Personal
 
#3

Re: ZLib - komprimieren mehrerer Dateien!

  Alt 1. Nov 2004, 12:52
Ich bin ein Trottel... sorry! Aber so blöd wie ich muss man erstmal sein! Die ZielDatei wurde einfach ins falsche Verzeichnis geschrieben!

Aber die letzte Frage ist noch immer aktuell...

Peinliche Grüße,
PP
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: ZLib - komprimieren mehrerer Dateien!

  Alt 1. Nov 2004, 13:21
Hi,
schau dir mal die Funktionen Delphi-Referenz durchsuchenFindFirst und Delphi-Referenz durchsuchenFindNext an. Wenn du danach suchst, findest du auch was in der Delphi-PRAXiS.

Chris

PS: Sonst aber gilt: zwei Fragen, zwei Threads. Danke.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz