2009-05-26 4 views
0

Ich habe dieses Programm:Warum liest oder schreibt dieses Programm nicht korrekt aus einer .bin-Datei? (C++)

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    fstream file; 
    file.open("test.bin", ios::in | ios::out | ios::binary); 
    if(!file.is_open()) 
    { 
     return -1; 
    } 
    int n = 5; 
    int x; 
    file.write(reinterpret_cast<char*>(&n), sizeof(n)); 
    file.read(reinterpret_cast<char*>(&x), sizeof(x)); 
    std::cout<<x; 
    file.close(); 
    std::cin.ignore(); 
    return 0; 
} 

, die angeblich ist eine ganze Zahl schreiben „n“ in eine .bin-Datei „test.bin“, dann lesen Daten aus „test.bin“ in eine ganze Zahl " x "und zeigt dann" x "auf dem Bildschirm an.

Wenn ich das Programm ausführen, zeigt es nicht 5, sondern -842150451. Warum tritt das auf und wie kann ich es beheben?

+0

Dupe von 908555. –

+0

Nein - keine dup von 908555; das schließt das Lesen von Daten nicht ein. –

Antwort

7

Verschiebt nicht die Datei.write() den aktuellen Dateizeiger, wenn Sie ihn schreiben, was dazu führt, dass Sie Daten von der ersten Stelle NACH den geschriebenen Daten lesen?

1

Sie müssen den Dateistrom nach dem Schreiben an den Anfang der Datei neu positionieren, um die Daten zu lesen, die Sie gerade geschrieben haben.

Sie sollten auch überprüfen, dass der Schreibvorgang alles geschrieben hat, was Sie erwartet haben, und ob das gelesen tatsächlich überhaupt etwas gelesen hat. Die Semi-Random-Nummer ist auf den Lesefehler zurückzuführen.

2

Fügen Sie file.seekg(0); zwischen den Lese- und Schreibbefehlen ein.

1

Ich stimme mit Jherico. Sie benötigen a:

file.seekg (0, ios::beg); 
+0

Kein ios :: bett benötigt (seekg ist überlastet) –

Verwandte Themen