AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit zLib (beschädigte Archive)

Ein Thema von endeffects · begonnen am 26. Nov 2005 · letzter Beitrag vom 26. Nov 2005
Antwort Antwort
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

Probleme mit zLib (beschädigte Archive)

  Alt 26. Nov 2005, 16:19
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;
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#2

Re: Probleme mit zLib (beschädigte Archive)

  Alt 26. Nov 2005, 16:40
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 www.wotsit.org müsste sich was passendes finden lassen). zlib implementiert immerhin nur den PKZIP-Algorithmus, die Bibliothek erzeugt nicht per se valide ZIP-Archive.
  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 03:45 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