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.


  • Administrator

    Die Funktion eof ist grundsätzlich immer etwas zu spät. Das eofbit wird 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


Anmelden zum Antworten