Можно ли использовать getline ()
для чтения действительного файла без установки failbit
? Я хотел бы использовать failbit
, чтобы генерировалось исключение, если входной файл не читается.
Следующий код всегда выводит basic_ios :: clear
в качестве последней строки - даже если указан допустимый ввод.
test.cc:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream inf;
string line;
inf.exceptions(ifstream::failbit);
try {
inf.open(argv[1]);
while(getline(inf,line))
cout << line << endl;
inf.close();
} catch(ifstream::failure e) {
cout << e.what() << endl;
}
}
input.txt:
the first line
the second line
the last line
результаты:
$ ./a.out input.txt
the first line
the second line
the last line
basic_ios::clear