Datei binär lesen



  • Hey,

    ich komme von C und möchte eine Datei binär "Häppchenweise" auslesen. In C war das ziemlich einfach:

    size_t bytes;
    while ((bytes = fread(buf, 1, 1024, file))
      ..
    

    Bei ifstream fehlt mir eine solche Funktion aber. Es gibt read(), das gibt aber ifstream& statt die Zahl der eingelesenen bytes zurück. Und es gibt read_some(), da hat man aber nicht unbedingt das Ende der Datei erreicht wenn man 0 bytes liest. Was wäre also die beste Möglichkeit das oben gezeigte mit C++ Mitteln zu erreichen?



  • loli schrieb:

    Es gibt read(), das gibt aber ifstream& statt die Zahl der eingelesenen bytes zurück.

    Das liegt daran, dass .read() immer exakt so viele Bytes liest, wie man ihm übergibt und ggf. blockiert. Was stört dich daran?



  • Edit: Verlesen...



  • 314159265358979 schrieb:

    loli schrieb:

    Es gibt read(), das gibt aber ifstream& statt die Zahl der eingelesenen bytes zurück.

    Das liegt daran, dass .read() immer exakt so viele Bytes liest, wie man ihm übergibt und ggf. blockiert. Was stört dich daran?

    Wenn das Dateiende erreicht wird, liest read die Bytes bis zum Enden und liefert sie ab. Da blockiert nichts.



  • Mit gcount kann man direkt nach der Leseoperation die Zahl der gelesenen Bytes ermitteln.



  • manni66 schrieb:

    Wenn das Dateiende erreicht wird, liest read die Bytes bis zum Enden und liefert sie ab. Da blockiert nichts.

    Das ist aber nicht der Normalfall.



  • manni66 schrieb:

    Mit gcount kann man direkt nach der Leseoperation die Zahl der gelesenen Bytes ermitteln.

    Danke, das löst das Problem.

    314159265358979: rofl, natürlich ist das der Normalfall wenn ich eine Datei einlese, da erreicht man schon öfter mal das Ende. 🙄



  • Das Ende kommmt aber genau 1 mal vor. Natürlich wird man das Ende irgendwann erreichen. Muss man hier heute eigentlich alles für ganz dumme erklären, um nicht missverstanden zu werden? -.-


Anmelden zum Antworten