Typen in Datei binär schreiben/lesen



  • Hallo Leute,

    mein erster Post und gleich ein Problem:
    Also erstmal die Situation: Ich habe eine Binärdatei, inder immer folgende Blöcke(int/int/double) gespeichert werden sollen:

    (int-wert)
    (int-wert)
    (double-wert)
    (int-wert)
    (int-wert)
    (double-wert)
    ...

    Nun soll es zwei Methoden geben, eine die diese drei Werte liest, und eine, die die drei Werte schreibt. Als Argument bekommen die Methoden jeweils eine Position in der Datei (also wo die drei Werte gelesen/geschrieben werden sollen).
    Wie stelle ich das an?

    Meine bisherige Lösung
    ----------------------

    Lesen:

    std::fstream filestream("test.txt", fstream::in | fstream::out | fstream::binary);
    
    filestream.seekg(position, ios_base::beg);	
    
    filestream >> tmp; n[i] = tmp; 
    filestream >> tmp; a[i] = tmp;
    filestream >> tmp; c[i] = tmp; 
    
    filestream.close();
    

    Schreiben:

    std::fstream filestream("test.txt", fstream::in | fstream::out | fstream::binary);
    
    filestream.seekp(position, std::ios_base::beg);			
    
    filestream << n[i] << endl;
    filestream << a[i] << endl;
    filestream << c[i] << endl;
    
    filestream.close();
    

    Die Position, an der gelesen/geschrieben werden soll, berechne ich so:
    Wenn ich z.B. den 2. Block holen möchte, ist

    position = (sizeof(int) + sizeof(int) + sizeof(double)) * 2
    

    Aber irgendwie habe ich da denkfehler drin, das ganze funktioniert nur teilweise...

    Hat einer eine Idee was zu tun ist?
    Vielen Dank fürs bis hierher lesen.

    Gruß
    Björn



  • die sache mit den << und >> operatoren ist zwar schön, aber sie funktioniert meinst nur mit textdateien.
    um binäre daten zu lesen oder zu schreiben gibt es read/write.

    filestream.read(&temp, sizeof(temp));
    // ...
    filestream.write(&temp, sizeof(temp));
    


  • OK danke, ich probiere jetzt mal mit read/write Objekte in die Datei zuschieben.


Anmelden zum Antworten