ifstream und fail bit
-
hallo,
ich habe eine Frage, warum wird hier sowohl das fail als auch das eof bit gesetzt:#include <iostream> #include <fstream> #include <string> #include <cerrno> #include <cstring> using namespace std; int main(int argc,char* argv[]) { ifstream file(argv[1]); string line; cout << "fail=" << file.fail() << endl; cout << "eof=" << file.eof() << endl; cout << "bad=" << file.bad() << endl; cout << "errno=" << errno << " (" << strerror(errno) << ")" << endl << endl << endl; while(getline(file,line)) cout << line << endl; cout << endl << endl; cout << "fail=" << file.fail() << endl; cout << "eof=" << file.eof() << endl; cout << "bad=" << file.bad() << endl; cout << "errno=" << errno << " (" << strerror(errno) << ")" << endl; return 0; }Sollte nicht nur das eof bit gesetzt werden?
Die Datei ist vorhanden und lesbar (wird auch richtig ausgegeben).
Bei der ersten Ausgabe ist keins der bits gesetzt. Bei der zweiten Ausgabe sind eof und fail gesetzt.
Das ganze hab ich unter Windows (minGW mit gcc Version 3.4.2) und MacOS (gcc Version 4.0.1) mit gleichem Ergnis getestet.
-
Das Überschreiten des Dateiendes gilt als Fehler (weil du an der Stelle keine brauchbaren Daten bekommst) und setzt deshalb das eofbit UND das failbit. Ist also vom Standard so vorgesehen.