我想从两个文件中读取,直到达到其中一个文件的末尾。 如果出现问题,fstream应抛出异常。C++ fstream:到达eof时抛出异常
问题是,当eof位被设置时,坏的或者失败的位也被设置。
ifstream input1;
input1.exceptions(ios_base::failbit | ios_base::badbit);
input1.open("input1", ios_base::binary | ios_base::in);
ifstream input2;
input2.exceptions(ios_base::failbit | ios_base::badbit);
input2.open("input2", ios_base::binary | ios_base::in);
ofstream output;
output.exceptions(ios_base::failbit | ios_base:: badbit);
output.open("output", ios_base::binary | ios_base::out | ios_base::trunc);
char in1, in2, out;
while(!input1.eof() && !input2.eof()) {
input1.read((char*) &in1, 1);
input2.read((char*) &in2, 1);
out = in1^in2;
output.write((const char*) &out, 1);
}
input1.close();
input2.close();
output.close();
这导致
$ ./test
terminate called after throwing an instance of 'std::ios_base::failure'
what(): basic_ios::clear
如何做是正确的?
我们是否假设“处理抛出异常的异常”这个明显的答案是不可能的? –
做的输入文件存在吗? –
可能的重复:http://stackoverflow.com/questions/6781545/why-failbit-set-when-eof-on-read-is-there-a-way-out – Csq