eof() liefert nicht das Ende der Datei
-
Hallo,
kann mir jemand sagen, warum der folgende Code nicht funktioniert. Er soll bei erreichtem Dateiende "true" zurück liefern, tut dies aber nicht. Von der Logik her sieht der Code wie folgt aus:
ifstream file(fDatei); while (file.eof() == false){ getline(file,buffer); file.clear(); file.seekg (0, ios::end); cout << file.eof(); }Ich hätte jetzt erwartet, dass nur die erste Zeile ausgelesen wird, dann wird der Zeiger auf das Dateiende gesetzt und durch die Überprüfung der while-Schliefe beendet das Programm. Allerdings ist dies nicht der Fall. Die while-Schleife wird wieder durchlaufen.
Gruß
rodgerwilco
-
Unabhängig von deinem Problem.Es empfiehlt sich bei Dateioperationen nicht auf eof zu prüfen,sondern es auf so eine Art zu machen
Ganze Zeile einlesen
while(getline(ifstream,string)) { //tu etwas damit }Wort für Wort einlesen
while(ifstream>>string) { //tu etwas damit }Somit gehst du 100% sicher, das du beim erreichen des Ende der Datei nicht 2mal einliest. Irgendjemand hatte da mal einen tollen Link gepostet mir fällt nur gerade nicht mehr ein wer das war.
Weiterhin will ich sagen, das Operationen, also das hin und herspringen mit dem Dateizeiger,nicht gerade das Gelbe vom Ei sind.Wenn du irgendwas mit der Datei machen willst, lies sie komplett ein, bearbeite das eingelesene und schreibe sie komplett zurück.
-
Die Funktion
eofist grundsätzlich immer etwas zu spät. Daseofbitwird erst gesetzt, wenn über das Dateiende gelesen wurde.Um trotzdem sowas abzufangen, gibt es in C++ die Möglichkeit, den Stream direkt auf Gültigkeit zu prüfen. Dadurch ist dir das folgende möglich:
std::string line; std::ifstream file("./bliblablub.txt"); while(std::getline(file, line)) { // ... }Grüssli
-
Irgendjemand hatte da mal einen tollen Link gepostet mir fällt nur gerade nicht mehr ein wer das war.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ