приветствую, вот https://github.com/ccy/delphi-zip нашёл реализацию библиотеки для компресси с использованием lzma, и все бы хороше но не могу понять как реализовать декомпрессию. Там в либе есть unit System.Zip.LZMA
В нем класс TLZMAEncoderStream и TLZMADecoderStream .
С классом TLZMAEncoderStream все понятно, но как быть с TLZMADecoderStream ?
Написал на коленке такой вот сэмпл: компрессия - Ok, а декомпрессия чето никак :(, шо делать люди добрые ?
| Код |
procedure TForm2.Progress(Sender: TObject; const aPosition, aSize, aCompressedSize: UInt64); begin end;
procedure TForm2.DeProgress(Sender: TObject; const aPosition, aSize: UInt64); begin end;
procedure TForm2.Button1Click(Sender: TObject); var LZI: TLZMAEncoderStream; OutStream, InStream: TMemoryStream; begin OutStream:= TMemoryStream.Create; LZI := TLZMAEncoderStream.Create(OutStream, Progress); InStream:= TMemoryStream.Create; InStream.LoadFromFile('1.exe'); InStream.Position := 0; LZI.Write(InStream, InStream.Size); OutStream.Position := 0; OutStream.SaveToFile('enc2.exe'); InStream.Free; OutStream.Free; LZI.Free; end;
procedure TForm2.Button2Click(Sender: TObject); var Deca: TLZMADecoderStream; Str1: TMemoryStream; S2 : TBytesStream; I: Integer; begin I := 0; Str1 := TMemoryStream.Create; Str1.LoadFromFile('enc2.exe'); Str1.Position := 0; Deca:= TLZMADecoderStream.Create(Str1, DeProgress); S2 := TBytesStream.Create; Deca.Read(S2.Bytes, 0, i); S2.Position := 0; S2.SaveToFile('Dec0.exe'); Str1.Free; S2.Free; end;
|
|