2017-02-01 3 views
0

Ich bin auf der Suche nach einer Möglichkeit, einen Teil einer binären ZIP-Datei (Startposition und Anzahl der zu lesenden Bytes) zu lesen. Momentan untersuche ich dies unter Windows, aber optimal wäre es plattformunabhängig. Für eine normale Binärdatei (entpackten), kann dies auf folgende Weise erreicht werden:Nur einen Teil einer binären ZIP-Datei lesen

//Open the file 
std::ifstream file (path, std::ios::in | std::ios::binary | std::ios::ate); 

//Move to the position to start reading 
file.seekg(64); 

//Read 128 bytes of the file 
std::vector<unsigned char> mDataBuffer; 
mDataBuffer.resize(128) ; 
file.read((char*)(&mDataBuffer[0]), 128) ; 

//Read as string 
std::string s_data(mDataBuffer.begin(), mDataBuffer.end()); 

file.close() 

Dieses Beispiel ist eine leicht modifizierte Version von this one.

Es sind auch viele Unzip-Pakete verfügbar (z. B. zlib oder minizip). Jede Überdeckung funktioniert, um eine Datei zu entpacken. Ich könnte einfach meine gezippte Datei entpacken, sie auf der Festplatte speichern und sie mit der obigen Methode lesen.

Leider habe ich kein Beispiel gefunden, nur einen Teil einer binären Zip-Datei zu lesen (wenn das überhaupt möglich ist), direkt aus der gezippten Datei. Da meine Datei ziemlich groß ist, möchte ich sie nicht komplett auf der Festplatte entpacken. Außerdem ist der Teil, den ich lesen möchte, ziemlich klein, also wäre es eine Verschwendung von CPU-Zeit, die Datei vollständig zu entpacken. Aus den gleichen Gründen möchte ich auch nicht die komplette Datei in meinen Speicher dekomprimieren. Ich bin auf der Suche nach einem echten Weg, nur eine Teil einer gezippten Datei zu lesen.

Wie konnte dies in C++ erreicht werden?

+0

Was identifiziert _the part_ einer komprimierten Datei? –

+0

Eine Anfangs- und Endposition für die Suche in der normalen Binärdatei (modifiziert in Frage) – takje

+0

Soll eine einzelne Datei aus dem Archiv extrahiert werden? Nicht, dass es wichtig wäre, ich würde dir dennoch empfehlen, eine tragbare Bibliothek zu finden, die es für dich handhabt. –

Antwort

0

Anscheinend gibt es keine allgemeine Möglichkeit, in ZIP-Dateien zu suchen. Dies war nach:

  • Ein Kommentar von @ πάντα ῥεῖ.
  • Ein allgemeiner Thread zum Suchen in gezippten Dateien here.
  • Eine ähnliche Frage here (obwohl die Frage selbst über Python ist).
Verwandte Themen