Используйте getline () без установки failbit

Можно ли использовать 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
8
задан Jeremiah 21 October 2011 в 20:59
поделиться