【发布时间】:2012-08-02 05:10:08
【问题描述】:
std::getline 在获得eof 时抛出异常。
我就是这样做的。
std::ifstream stream;
stream.exceptions(std::ifstream::failbit|std::ifstream::badbit);
try{
stream.open(_file.c_str(), std::ios_base::in);
}catch(std::ifstream::failure e){
std::cout << "Failed to open file " << _file.c_str() << " for reading" << std::endl;
}
while(!stream.eof()){
std::string buffer = "";
std::getline(stream, buffer);
//process buffer
//I do also need to maintain state while parsing
}
在上面的代码中,getline 在得到eof 时抛出异常
这种情况如何处理?
编辑
std::string buffer = "";
while(std::getline(stream, buffer)){
//also causes getline to hit eof and throw
}
【问题讨论】:
-
旁注:循环的结构不正确,因为您需要在
std::getline()之后立即检查eof()。 -
您要求例外。点击
eof后,流处于bad状态。 -
'如何处理这种情况'。这取决于你想做什么,你没有很好地解释自己。你不想有例外吗?你想捕捉异常吗?如果你想捕捉它,接下来你想发生什么?请解释您要做什么。