![]() |
LZMA compiler in Lazarus?
Hi liebe Community,
ich versuche momentan einen (De-)Komprmirung von der in meinem Programm verwendeten daten zu erreichen. hierzu verwende ich die 'Pascal LZMA IDK' (eine dammlung von units welche vom ursprünglichen C++ Code her für Delphi Übersetht wurden) Delphi: ![]() Original C++: ![]() Momentan hab ich es mit den beiligenden Beispielen und 'How to use' soweit geschaft das ich eine einzelde datei in die .7z datei bekomme. (ist dann komprimirt und alles) Allerdings wird diese das in test umbenant und es ist halt nur eine datei. Ich würde gerne ganze Ordnerstrukturen sammt inhalt comprimiren. (für die saves des programms, --> Übertragung zu anderen)
Code:
Würde mich über irgentwelche idean freuen wie ich das Umsetzen könnte.
unit UnStorychoose;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ULZMABench,ULZMAEncoder,ULZMADecoder,UBufferedFS,ULZMACommon; type { TfmStorychoose } TfmStorychoose = class(TForm) Button1: TButton; dlSpielwahl: TOpenDialog; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var fmStorychoose: TfmStorychoose; implementation {$R *.lfm} { TfmStorychoose } procedure TfmStorychoose.Button1Click(Sender: TObject); var encoder: TLZMAEncoder; inStream:TBufferedFS; outStream:TBufferedFS; filesize:int64; i: Integer; begin inStream:=TBufferedFS.Create(dlSpielwahl.FileName,fmOpenRead or fmsharedenynone); outStream:=TBufferedFS.Create('C:\test.7z',fmcreate); encoder:=TLZMAEncoder.Create; encoder.SetEndMarkerMode(false); encoder.WriteCoderProperties(outStream); fileSize := inStream.Size; for i := 0 to 7 do WriteByte(outStream,(fileSize shr (8 * i)) and $FF); encoder.Code(inStream, outStream, -1, -1); encoder.free; outStream.Free; inStream.Free; end; end. PS: Ich weis das es gute .zip und .rar componeten für Lazarus giebt diese unterstützen aber leider nicht den LZMA algorytmus (.lzma bzw. .7z) welchen ich gerde aufgrund seiner extremst guten Kommprimirungsrate haben wollte. |
AW: LZMA compiler in Lazarus?
Mit dem LZMA-Encoder kannst du halt nur einen Stream komprimieren. Das ist dann auch keine 7-Zip Datei (also die Endung .7z ist hier falsch), sondern eine LZMA komprimierte Datei. Da musst du dich schon selbst drum kümmern, was in den Stream kommt.
Wenn du ein integriertes Dateisystem willst musst du ein Archivformat wie 7-Zip oder Zip benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 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