可能重复:
Why is iostream::eof inside a loop condition considered wrong?
我是一个初学者,我有这个功能,我使用.eof然而我被告知这不是一个好主意,因为这不适用于linux,我应该使用.good 所以你能告诉我我会做什么以及如何修改它
std::string ex_file_licensing::getUsedLicense(const std::string &FlexLMfileName){
std::ofstream openFile;
std::string line;
std::string tempString;
std::string testResult;
size_t start_pos;
size_t stop_pos;
std::string retour ="";
filebuf fb;
fb.open (FlexLMfileName.c_str(),ios::in);
istream toOpen(&fb);
if(toOpen.eof()){
while(!toOpen.eof()){
getline(toOpen,line);
if(line.find("Checkout") != std::string::npos ){
start_pos = line.find(":");
tempString = line.substr(start_pos+1);
stop_pos = tempString.find("/");
testResult = tempString.substr(start_pos, stop_pos);
}
else if (line.find("FLEXnet") != std::string::npos ){
start_pos = line.find("FLEXnet");
tempString = line.substr(start_pos+1);
stop_pos = tempString.find("Feature");
testResult = tempString.substr(start_pos, stop_pos);
}
cout << testResult << endl;
retour.append(testResult);
}
fb.close();
}
return retour;
}
答案 0 :(得分:1)
使用这样的循环:
while (getline(toOpen, line)) {
...
}
答案 1 :(得分:0)
两者都不使用:流有一个内置的转换运算符为布尔值,因此您只需使用if (toOpen)
或while(toOpen)
进行测试,就可以正常运行。
顺便说一下,你的if
条件看起来不对,因为它只在文件流到达EOF字符时执行代码。