LZMA und C++
-
Hallo,
ich versuche mich gerade in das LZMA von 7z einzuarbeiten (Linux). Besonders achte ich auf die C++ Schnittstelle, Unicode und Plattformunabhängigkeit.
Doch irgendwie blicke ich beim LZMA SDK nicht durch. Gibt es irgendwo im Web ein Beispiel zum Packen und Entpacken eines Pakets?
Zudem stellen sich mir die Fragen
- Ist es möglich die Struktur (z.B. Ordner und Filenamen) des Archives auszulesen, ohne das gesamte Archive zu entpacken?
- Kann man einzelne Dateien entpacken? (ohne das gesamte Archive entpacken zu müssen)
- Falls beide Punkt nicht erfüllt sind, welches Format bietet so etwas?Gruß, Thomas
-
Wo ist die C++ Frage?
-
Nachdem das 7zip GUI Teil beide Dinge kann (Struktur auslesen/anzeigen sowie einzelne Files entpacken), muss die Antwort wohl "ja" sein.
Wobei es beim Entpacken von einzelnen Files vermutlich eine Einschränkung gibt: mit "solid" Archiven wird das nicht funktionieren.
Ich würde mir zwar erwarten dass die API das "verstecken" kann, so dass man für "solid" Archive keinen speziellen Code braucht. Aber die Daten vor dem gewünschten File muss das Ding zumindest teilweise durchackern, da führt kein Weg dran vorbei. D.h. es wird u.U. recht lange dauern ein kleines File aus einem solchen Archiv zu entpacken.
-
Vielleicht sollte man auch die Textdatei lesen?
CPP/ -- CPP files
7zip - files related to 7-Zip Project
Bundles - Modules that are bundles of other modules
LzmaCon - lzma.exe: LZMA compression/decompressionDann findet man paar Hinweise!
#include "../../../../C/Lzma86.h" #include "../../Compress/LzmaDecoder.h" #include "../../Compress/LzmaEncoder.h"
Viel Glück!
-
Vielen Dank für eure Beiträge.
@Zeus
Ich werde heute Nacht mal einen kleinen Test aufsetzen. Was mir noch etwas Kopfzerbrechen bereitet ist, dass LZMA eigentlich für Winodws entwickelt wird. Hoffentlich gibt es da keine Probleme.Gibt es eine Alternative zu LZMA (und XZ Utils)?
Evtl. GZip und tar. Eine Alternative muss mit Linux und Windows zurecht kommen.Gruß, Thomas
-
zlib dürfte für fast alle Plattformen verfügbar sein.
-
Oder bzip2
http://bzip.org/
Haben aber beide keine Archivfunktionen.
-
XZ gibt es für Unix/Linux und für Windows. Das gleiche gilt für bzip2 und zlib. Allerdings wie hustbaer schon erwähnte gibt es keine Archivierungsfunktionen, d.h. das sind reine Komprimieralgorithmen. Die API ist bei allen recht ähnlich, aber recht kompliziert. Wenn Du C verwendest, findest Du in den sourcen von http://openzim.org einfache C -wrapper, die ein iostream-Interface dazu bieten.