fstream findet kein eof
-
Hallo
Leider findet fstream kein eof und macht die Endlosschleife.central.open("central_D.txt", ios::in | ios::out | ios::ate);
...
while (!central.eof())
{
central.seekg(58,ios::cur);
central >> strName;
if (strName == strKontoName )
{
central.seekg(-58 - strName.length(), ios::cur);
central >> strcnt;...
Kann mir Jemand dabei helfen ?
Vielen Dank
Vladimir
-
Das
eofbitFlag wird erst gesetzt, wenn du über das Dateiende hinausgelesen hast. Wenn du also genau auf das Ende stösst, wird daseofbitnicht gesetzt und mitcentral.seekg(58,ios::cur);geht es natürlich wieder an diese Position in der Datei. Daher kommt wohl die Endlosschleife.Verlässlich ist eigentlich hauptsächlich, wenn du den Stream auf Gültigkeit prüfst, nach jeder Leseoperation. Also zum Beispiel wenn du in einer Textdatei alle Wörter einzeln einlesen willst:
std::ifstream file("..."); std::string word; while(file >> word) // Solange einlesen, wie das einlesen funktioniert, { // bzw. der Stream gültig ist. // ... }Grüssli
-
Danke für die hilfreiche Antwort
(Wenn das Programm mit seekg über eofbit Flag drüber geht,
wird kein eof erkannt ? (wenn ich es richtig verstanden habe))
-
rosic schrieb:
(Wenn das Programm mit seekg über eofbit Flag drüber geht,
wird kein eof erkannt ? (wenn ich es richtig verstanden habe))Das habe ich zwar nicht gesagt, aber soweit ich mich erinnere, kann ganz sicher nicht bei
seekgeineofbitgesetzt werden. Es wäre höchstens einbadbitoderfailbitmöglich. Allerdings haben die, glaub ich, nichts mit der Position an sich zu tun. Ich müsste allerdings zuerst im Standard nachlesen gehen, um dies mit absoluter Sicherheit zu sagen.Um das Ende von einer Datei zu erkennen, sind die Methoden
eof,badundfailallerdings meistens ungeeignet.Grüssli