Có thể sử dụng getline()
để đọc tệp hợp lệ mà không cần thiết lập failbit
không? Tôi muốn sử dụng failbit
để ngoại lệ được tạo nếu tệp đầu vào không thể đọc được.Sử dụng getline() mà không cài đặt failbit
Mã sau luôn luôn xuất ra basic_ios::clear
làm dòng cuối cùng - ngay cả khi đầu vào hợp lệ được chỉ định.
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
kết quả:
$ ./a.out input.txt
the first line
the second line
the last line
basic_ios::clear
Khi nào bạn mong đợi failbit được nâng lên khi sử dụng getline()? – selalerer
Nếu tệp không tồn tại. ví dụ: './a.out nosuchfile.txt' – Jeremiah
Để biết rằng bạn có thể kiểm tra is_open() sau khi bạn mở tệp. – selalerer