Ich versuche, LzmaLib 's LzmaCompress()
und LzmaDecompress()
mit Puffern zu verwenden und die Beispiele zur Verfügung gestellt hier .
Ich teste mit einem ~ 3MB Puffer und die Komprimierungsfunktion scheint gut zu funktionieren (erzeugt einen ~ 1,2MB komprimierten Puffer), aber wenn ich versuche, zu dekomprimieren, extrahiert es nur ~ 300 Bytes und gibt Die wenigen extrahierten Bytes sind richtig, aber ich weiß nicht, warum es dort aufhört. Mein Code: Wenn dieser Code nicht der bessere Weg ist, um Puffer mit LzmaLib zu komprimieren, nehme ich gerne Vorschläge an. SZ_ERROR_DATA
.
Ich wette, das Problem lauert darin, wie Sie Ihre Dateien lesen / schreiben. Sie müssen sie im Binärmodus öffnen, um Ersetzungen während Lese- / Schreibvorgängen zu verhindern.
Ändern Sie alle Vorkommen von:
fopen(xxx, "r")
- & gt; %Code%
fopen(xxx, "rb")
- & gt; %Code%
Ich habe dies nicht speziell für LzmaCompress
überprüft, aber die meisten anderen Komprimierungsbibliotheken wie libz behandeln diese Funktion ähnlich wie die Standardfunktionen read / write oder fread / fwrite, dh Sie können die Funktionen fortlaufend aufrufen, um mehr zu komprimieren und mehr Daten in einem Stream. Irgendwann wirst du sagen müssen "Ich bin fertig, bitte spüle alles, was noch nicht geschrieben wurde". Möglicherweise haben Sie diesen Teil vergessen. Wenn nicht, wäre ein minimales, vollständiges und überprüfbares Beispiel cool.
Wenn Sie komprimieren, übergeben Sie die Anzahl der komprimierten Ausgangsbyte an den Aufrufer. Aber Ihr Puffer enthält LZMA_PROPS_SIZE
zusätzliche Bytes. Wenn Sie also die lzma-Datei schreiben, vergessen Sie tatsächlich die letzten LZMA_PROPS_SIZE
Bytes und beim späteren Lesen fehlen diese.
Tags und Links c compression lzma 7zip