Filestream endet nach 8KB



  • Hallo,

    ich habe gerade den Syntax-Highlighter aus der Boost.Regex-Doku ausprobiert. Soweit hat das auch wunderbar funktioniert. Sobald die Dateien größer werden, wächst die Größe HTML-Datei ja auch stark an.

    Das Problem ist, dass ab 8KB (genau 8.192 Bytes) nichts mehr in die Ausgabedatei geschrieben wird.

    std::ofstream outputFileStream(outputFileName.c_str());
        // ...
    
        // outputCode enthält den gesamten Code
        std::string outputCode = tmpCode.str();
        std::ostream_iterator<char, char> outFileIt(outputFileStream);
    
        // hier soll das highlighting stattfinden
        boost::regex_replace(outFileIt, outputCode.begin(), outputCode.end(),
            e1, format_string, boost::match_default | boost::format_all);
    
        // ...aber im outputFileStream landen nur 8.192 Bytes.
    

    Die HTML-Datei bricht dann logischerweise einfach ab:

    ...
    <span style='color: #007020; font-weight: bold;'
    

    Kann ich diese 8KB, die in den Stream passen, irgendwie vergrößern? Oder muss ich den Code in 8KB-Blöcke aufteilen und nacheinander in die Datei schreiben?

    Vielen Dank im Voraus,
    Amgon



  • [cpp]std::ofstream outputFileStream(outputFileName.c_str());

    std::ofstream outputFileStream(outputFileName.c_str(),ios::binary); [/cpp]

    This is what you need, but I was suprised, that nobody helped you !
    Ich wollte auch mal was auf Englisch schreiben 🙂



  • Works great, thanks. 🙂

    Was verändert sich denn, wenn man die Datei im Binärmodus öffnet?



  • ich weiß nur, dass beim schreiben aus einem Zeilenumbruch ein Kasten wird.

    EDIT: macht aber kein großen Unterschied, weil der eh als Umbruch gewertet wird.



  • Da werden überhaupt keine Kasten aus irgendwas.

    Unter Windows ist der Unterschied: "binär" heisst 1:1 die Bytes in die Datei schreiben wie man sie übergibt, "text" (bzw. "nicht binär") heisst dass "\n" in "\r\n" übersetzt wird.
    Beim Lesen umgekehrt: es wird ohne "binär" einfach "\r\n" in "\n" übersetzt.

    Unter Linux/BSD/... ist der Unterschied: es gibt keinen Unterschied (beides 1:1).


Anmelden zum Antworten