C ++ Einstellung Iostream nicht EOF-Bit auch wenn gcount 0 zurück
Frage
Ich bin eine Anwendung unter Windows developping, und ich bin mit fstreams in die Datei zu lesen und zu schreiben.
Ich schreibe mit fstream wie folgt geöffnet:
fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);
und mit diesem Befehl zu schreiben
fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));
Schließen Sie die Datei nach jedem Schreib mit
fs.close()
mit ifstream Lesen wie folgt geöffnet:
is.open(filename, std::ios::in);
und mit diesem Befehl zu lesen:
is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
Die Schreib geht in Ordnung. Aber ich lese diese Art und Weise in einer Schleife:
while(!is.eof())
{
is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}
und das Programm hält lesen, auch wenn das Ende der Datei erreicht werden soll. istellg pos 0, und gcount gleich 0 ist auch, aber das Fail-Bit und EOF sind Bit beide ok.
Ich bin mit verrückt über diese, brauche Hilfe ...
Lösung
Versuchen Sie diese:
while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}
Auch sollten Sie die istream
mit der binary
Flagge öffnen auch:
is.open(filename, std::ios::in | std:ios::binary);
Wenn es für immer liest, was liest es? Welche Art ist T?