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
Antwort Antwort
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
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#2

AW: LZMA compiler in Lazarus?

  Alt 30. Okt 2014, 08:27
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.
Gruß
Cookie
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz