[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 TDecompressionStream

    Der 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...


Anmelden zum Antworten