AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

LZMA compiler in Lazarus?

Ein Thema von Kratons · begonnen am 29. Okt 2014 · letzter Beitrag vom 30. Okt 2014
 
Kratons

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

LZMA compiler in Lazarus?

  Alt 29. Okt 2014, 20: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 20:48 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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