Warum nicht dieses Programm lesen (oder schreiben?) Richtig aus einer .bin-Datei? (C ++)
-
05-09-2019 - |
Frage
Ich habe dieses Programm:
#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;
}
das soll eine ganze Zahl „n“ in eine .bin-Datei „test.bin“ schreiben, dann lesen Daten aus „test.bin“ in eine ganze Zahl „x“ ist, dann zeigt „x“ auf dem Bildschirm.
Wenn ich das Programm ausgeführt wird, zeigt es nicht 5, sondern -842.150.451. Warum tritt das und wie kann ich es beheben?
Lösung
Ist das nicht die file.write (), um die aktuellen Dateizeiger bewegen, wenn Sie es schreiben, so dass Sie Daten von der ersten Stelle der schriftlichen Daten lesen?
Andere Tipps
Setzen Sie file.seekg(0);
zwischen den Lese- und Schreibbefehle.
Sie haben die Datei-Stream auf den Anfang der Datei neu zu positionieren, nachdem Sie den Schreib tun, um die Daten zu lesen, die Sie gerade geschrieben hat.
Sie sollten auch prüfen, ob die Schreib alles schrieb man es erwartet, und ob die tatsächlich lesen überhaupt etwas zu lesen. Die halb-Zufallszahl ist aufgrund der Lese Versagen.
Ich bin mit Jherico. Sie benötigen ein:
file.seekg (0, ios::beg);