[Gelöst] Hilfe bei TDecompressionStream
-
Scenario:
- Eine Datei mit vielen kleinen Datein in sich, jede einzeln mit zlib komprimiert.
- Ich habe den Anfang einer Datei und dessen Größe (komprimiert)
- Ich extrahiere daraus direkt den Teil und dekomprimiere ihn mit einem TDecompressionStreamDer folgende Fünfzeiler funktioniert theoretisch:
// ein paar Werte / Angaben sind zur Vereinfachung im Beispiel einfach Konstanten std::auto_ptr <TFileStream> File_re(new TFileStream("archiv.arc", fmOpenRead)); // zu lesende Datei File_re->Seek(517, soBeginning); // sucht Anfang std::auto_ptr <TDecompressionStream> Decom (new TDecompressionStream(File_re.get())); std::auto_ptr <TFileStream> File_wr(new TFileStream("decompressed.txt", fmCreate)); // Datei in die geschrieben wird File_wr->CopyFrom(Decom.get(), Arch.GetFileList()->Entries[FileIntryIndex].DataSize); // in Datei kopieren
Arch.GetFileList()->Entries[FileIntryIndex].DataSize
**Das ist aber die Größe in komprimierter From, was ich aber bräuchte wäre die Größe in unkomprimierter Form, und die weiß ich nicht.
(Bis dahin ist alles supi dekomprimiert, aber leider fehlt dadurch der Rest.)Wie löse ich dieses kleine Problem?**
EDIT: am besten ohne den teilabschnitt der Datei in der RAM zu laden.
EDIT 2 (Lösung): Statt CopyFrom() habe ich nun:
int rd = 0; char buffer[16384]; do { rd = Decom->Read(buffer, sizeof(buffer)); File_wr->Write(buffer, rd); } while (rd == sizeof(buffer));
Ich sollte einfach mal mehr schlafen...