Hi alle,
ich lese in einem C++ Programm aus einer Datei zeilenweise ein, um auf Fehler zu reagieren habe ich die Bitmaske für Exceptiones auf ios_base::failbit | ios_base::badbit gesetzt.
Am Ende der Datei wird immer eine Exception ausgelöst, aber warum? Das Bit für EOF ist doch nicht gesetzt. Setzte ich die Bitmaske nur auf ios_base::badbit läuft alles prima. In meinen Büchern finde ich nur das failbit für, die letzte Ein- oder Ausgabeoperation war fehlerhaft, steht. Kann das so nicht nachvollziehen, wäre schön wenn mir einer auf die Sprünge helfen kann.
Ich habe das ganz unter Linux mit dem gcc 4.3.1 übersetzt. Hier mal mein Code:
int
main ( int argc, char *argv[] )
{
cout << "\nProgramm " << argv[0] << endl << endl;
string ifs_file_name = "test.txt"; /* input file name */
ifstream ifs; /* create ifstream object */
ifs.exceptions( ios_base::failbit | ios_base::badbit );
ifs.open (ifs_file_name.c_str()); /* open ifstream */
if (!ifs) {
cerr << "\nERROR : failed to open input file " << ifs_file_name << endl;
}
string line;
while ( getline(ifs, line)){
cout << line << endl;
}
ifs.close (); /* close ifstream */
return 0;
} // ---------- end of function main ----------
MfG
Otto