![]() |
Probleme mit TLZMADecoder.Code
Hallo!
Für ein Projekt brauche ich unbedingt die Möglichkeit, mittels dem LZMA-SDK Dateien zu komprimieren. Also habe ich mir das SDK von ![]() Ich benutze folgenden Code, der auch als Beispiel für die komprimierung gelistet ist:
Delphi-Quellcode:
Input ist ein XZ-Komprimiertes TAR archiv, welches von anderen Anwendugen problemlos geöffnet werden kann.
procedure Decompress(infile: String;outfile: String);
var outdir : string; var dictionary:integer; inStream:TBufferedFS; outStream:TBufferedFS; filesize:int64; i:integer; properties:array[0..4] of byte; decoder:TLZMADecoder; outSize:int64; v:byte; const propertiessize=5; begin inStream:=TBufferedFS.Create(infile,fmOpenRead or fmsharedenynone); outStream:=TBufferedFS.Create(outfile, fmcreate); if inStream.read(properties, propertiesSize) <> propertiesSize then raise Exception.Create('input .lzma file is too short'); decoder := TLZMADecoder.Create; if not decoder.SetDecoderProperties(properties) then raise Exception.Create('Incorrect stream properties'); outSize := 0; for i := 0 to 7 do begin v := {shortint}(ReadByte(inStream)); if v < 0 then raise Exception.Create('Can''t read stream size'); outSize := outSize or v shl (8 * i); end; if not decoder.Code(inStream, outStream, outSize) then raise Exception.Create('Error in data stream'); decoder.Free; outStream.Free; inStream.Free; end; Dummerweise verstehe ich den Dekompressionsalgorithmus nicht (der Code ist überhaupt nicht dokumentiert). Auf jeden Fall erreicht er folgende Bedingung (weshalb er abbricht) (ungefähr Z. 382):
Delphi-Quellcode:
(in der Datei ULZMADecoder.pas)
if (rep0 >= nowPos64) or (rep0 >= m_DictionarySizeCheck) then begin
m_OutWindow.Flush(); result:=false; exit; end; Wie bekomme ich das zum Laufen? Ich habe schon alles mögliche probiert, aber der Fehler muss in diesem Algorithmus liegen. Hat jemand eine Idee? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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