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。