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 ...

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top