AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Gelöst] mit (Delphi)-ZLib PKZIP/WindowsArchive entpacken
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst] mit (Delphi)-ZLib PKZIP/WindowsArchive entpacken

Ein Thema von Satty67 · begonnen am 24. Aug 2010 · letzter Beitrag vom 24. Aug 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.531 Beiträge
 
Delphi 12 Athens
 
#1

AW: Problem: mit (Delphi)-ZLib PKZIP/WindowsArchive entpacken

  Alt 24. Aug 2010, 09:41
Hmmmmmm, du könntest in den Zipdateikommentaren oder in einer Extradatei in der ZIP diese Prüfzumen ablegen.

Ich weiß auch nicht, ob man sich von der ZLib etwas entpackenlassen und dabei die Prüfsume ignorieren kann.
Eventuell einfach irgendeine Dummyprüfsume einfügen, entpacken und die Fehlermeldung ignorieren.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Aug 2010 um 09:45 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Problem: mit (Delphi)-ZLib PKZIP/WindowsArchive entpacken

  Alt 24. Aug 2010, 09:59
Nebenbei bemerkt:
Hat ein ZIP-File nicht eine maximale Größe von 2 GB?
Welches Fileformat wäre besser? 7zip?
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Problem: mit (Delphi)-ZLib PKZIP/WindowsArchive entpacken

  Alt 24. Aug 2010, 10:55
Jain, der PKZIP-Header kommt mit 4 GByte klar, aber das reicht auch.

Bin der Sache näher gekomen, die vorangestellten Bytes scheinen doch reproduzierbar. Hatte vorher immer mit der gleichen Quelle gestestet, weshalb mir nicht aufgefallen ist, was mit der neuen Testumgebung auffällt:

Mini-Testumgebung (3x Memo, 2x Button, 1x Label, ZipDataStream als Form-Member)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ZipDataStream := TMemoryStream.Create();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ZipDataStream.Free;
end;

procedure TForm1.ButtonCompressClick(Sender: TObject);
var
  CompStream : ZLib.TCompressionStream;
  SourceStream : TStringStream;
  SourceSize : Integer;
  b : Byte;
begin
  ZipDataStream.Size := 0;
  SourceStream := TStringStream.Create(Memo1.Text);
  SourceSize := SourceStream.Size;

  CompStream := ZLib.TCompressionStream.Create(clDefault, ZipDataStream);
  try
    CompStream.CopyFrom(SourceStream, 0);
  finally
    CompStream.Free;
    SourceStream.Free;
  end;

  Label1.Caption := Format('%d Bytes komprimiert zu %d Bytes.',
                                  [SourceSize, ZipDataStream.Size]);

  ZipDataStream.Position := 0;
  memo2.clear;
  while ZipDataStream.Read(b, 1) = 1 do
    memo2.Text := memo2.Text + IntToHex(b,2) +' ';
end;

procedure TForm1.ButtonDecompressClick(Sender: TObject);
var
  DeCompStream : ZLib.TDeCompressionStream;
  TargetStream : TStringStream;
  s : String;
  c : AnsiChar;
begin
  ZipDataStream.Position := 0;
  TargetStream := TStringStream.Create('');
  DeCompStream := ZLib.TDeCompressionStream.Create(ZipDataStream);

  try
    s := '';
    while DeCompStream.Read(c, SizeOf(c)) = SizeOf(c) do
      s := s + c;
    Memo3.Text := s;
  finally
    DeCompStream.Free;
    TargetStream.Free;
  end;
end;
Sowohl bei Delphi 5 als auch bei Delphi 2007 haben die beiden Bytes den Hex-Wert 78 9C. Sorry, dass mir das vorher nicht aufgefallen ist.... damit sollte sich das Problem lösen lassen.

@himitsu

Deine erste Lösung war schon die richtige, hatte die nur verworfen, weil ich annahm es ist eine Prüfsumme. Ist aber wohl nur ein magic-Header.

Geändert von Satty67 (24. Aug 2010 um 11:42 Uhr)
  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 01:41 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