Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi GZip-Stream nach Stream entpacken (https://www.delphipraxis.net/160769-gzip-stream-nach-stream-entpacken.html)

Reinhold Nau 30. Mai 2011 21:33

GZip-Stream nach Stream entpacken
 
hallo,
ich bin nicht der erste mit dieser Frage, aber eine Antwort habe ich nirgendwo gefunden..
Ich habe aus einem http-get eine gzip-Datei (Icon), die ich entpackt brauche (aber nicht in einer Datei,
sondern in einem Stream).
ZLib: was auch immer ich versuche, der Read(Buffer) bringt mir eine TCompressionException mit der aussagekräftigen
Zusatzinformation 'Fehler'. Offenbar packt Zlib nur aus, was es selbst eingepackt hat ?
Abbrevia: ich finde in den GZip-KLassen nur Datei-/Archivbezogene Methoden.
Für Zip gibts ja da ein schickes Inflate(Stream, Stream), aber für gz ?

Weiß jemand Rat ?
Danke schonmal
Reinhold

Satty67 30. Mai 2011 21:38

AW: GZip-Stream nach Stream entpacken
 
Das geht auch mit ZLib. Du musst den Daten für den Decomprssionsstream nur 2 Kennbytes voranstellen. Die sind von Delphi5 - 2007 gleich geblieben. Muss nur grad suchen, welche zwei Bytes das waren.

€: Hex-Wert 78 9C

Also bei den komprimierte Daten voranstellen (z.B. memoryStream, dann übergeben)

Siehe dazu auch den Thread

Union 30. Mai 2011 21:42

AW: GZip-Stream nach Stream entpacken
 
Es gibt in Abbrevia eine Methode ExtractToStream.

Satty67 30. Mai 2011 21:52

AW: GZip-Stream nach Stream entpacken
 
Wo ich den alten Thread nochmal durchlese, hatte damals auch die angesprochenen "echten" ZLib Units runter geladen. ZLibEx/ZLibExApi/ZLibExGZ etc. (die liegen hier im Projektordner mit drin)

Weis aber nimmer, ob die das Problem gelöst haben, der Name der 3. Unit lässt aber drauf schliessen.

Reinhold Nau 1. Jun 2011 16:55

AW: GZip-Stream nach Stream entpacken
 
@Satty67:
danke, das hat geholfen :-D
Ich habe nochmal ein bisschen <Jugend forscht> betrieben:
Die ZLib in D2007 kann definitiv kein GZip.
Ich habe mir die 'richtige' (V1.2.5) geholt, damit geht das (ZLibExGZ, wie Du schon erwähnt hast). Juhu.
Die beiden Magic Bytes sind korrekt, helfen aber auch nicht bei GZip.
Also, danke nochmal für die Tipps.

@Union:
Tja, ExtractToStream finde ich in Abbrevia nur bei Zip/Arc..
In GZip gibt's ein ExtractItemToStreamAt, das erwartet aber irgendeine Archiv-Struktur
(soweit ich das aus dem Code erkennen konnte).

Gruß
Reinhold

-----------------------------------------------------------------------------
21 ist nur die halbe Wahrheit


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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