if (!ip_filter_file.empty())
{
std::ifstream in(ip_filter_file.c_str());
ip_filter filter;
while (in.good()) //good()解释如下
{
char line[300];
in.getline(line, 300);
int len = in.gcount();
if (len <= 0) continue;
if (line[0] == '#') continue;
int a, b, c, d;
char dummy;
in >> a >> dummy >> b >> dummy >> c >> dummy >> d >> dummy;
address_v4 start((a << 24) + (b << 16) + (c << 8) + d);
in >> a >> dummy >> b >> dummy >> c >> dummy >> d >> dummy;
address_v4 last((a << 24) + (b << 16) + (c << 8) + d);
int flags;
in >> flags;
if (flags <= 127) flags = ip_filter::blocked;
else flags = 0;
if (in.fail()) break;
filter.add_rule(start, last, flags);
}
ses.set_ip_filter(filter);
}
1) 如果一个流遇到文件结束符,则eof()返回true。
if ( inOut.eof() )
// ...
2) 如果试图做一个无效的操作,例如seeking重定位操作超出了文件尾,则bad()返回true。
3) 如果操作不成功,例如打开一个文件流对象失败,或遇到一个无效的输入格式,则fail()返回true。
ifstream iFile( filename, ios_base::in );
if ( iFile.fail() ) //不能打开
error_message( ... );
4) 如果其他条件都不为true,则good()返回true。