2016-05-25 15 views
0

Ich verwende zlib und C++ zum Komprimieren/Dekomprimieren von Dateien.Wie bekomme ich die ursprüngliche Dateiendung nach INFLATE?

Ich kann jetzt jede Datei deflationieren und es in .z Erweiterung einfügen. Aber wenn ich .z-Datei aufblasse, muss ich die benötigte Erweiterung manuell setzen. Das Aufblasen funktioniert so, wie es sollte und ich kann einfach .z Datei aufstarten oder abspeichern.

Ich habe gelesen zlib manual aber konnte nicht verwalten, wie mein Problem zu lösen. Ich nehme an, ich muss den Header des Archivs für diese Information graben?

Jede Hilfe wäre willkommen, danke!

+0

Ich denke, Sie haben die ursprüngliche Erweiterung beim Komprimieren gelöscht. I.e. Sie sollten in Datei.ext.z komprimieren, nicht in Datei.z. – Matt

+0

@Matt, stimmt. Ich habe die ursprüngliche Erweiterung geschnitten :) Ihr Hack ist wirklich nett, aber gibt es einen anderen Weg? – Alexandr

+1

Es ist nicht wirklich ein Hack. Denken Sie an diese .tar.gz-Dateien. Zilb hat keine originale Dateiinfo im komprimierten Stream. Sie müssen sich damit auseinandersetzen. Unix-Weg ist Teer. Aber Sie können einige andere Optionen wählen, wenn Sie möchten. – Matt

Antwort

2

Die zlib-Bibliothek komprimiert und dekomprimiert sowohl zlib- als auch gzip-Streams. zlib-Streams verfügen über einen sehr kompakten Header und Trailer ohne Angabe von Dateinamen. Der gzip-Header und -Trailer andererseits kann einen Dateinamen speichern, der beim Dekomprimieren verwendet werden kann. Sie sollten die zlib documentation lesen, um zu sehen, wie Sie das gzip-Format verwenden und wie Sie den gzip-Header verarbeiten.