Einzelnen Beitrag anzeigen

Kratons

Registriert seit: 20. Okt 2014
Ort: Deutschland
12 Beiträge
 
FreePascal / Lazarus
 
#1

LZMA compiler in Lazarus?

  Alt 29. Okt 2014, 19:40
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: https://www.birtles.org.uk/programming/
Original C++: http://www.7-zip.org/sdk.html

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:
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.
Würde mich über irgentwelche idean freuen wie ich das Umsetzen könnte.

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.

Geändert von Kratons (29. Okt 2014 um 19:48 Uhr)
  Mit Zitat antworten Zitat