Analogon to ferror(FILE *)for isstreamstream?

时间:2011-05-04 18:02:49

标签: c++ file-io stringstream eof

我目前正在尝试将代码从使用C风格的FILE *解析为C ++风格的istringstream。我的程序并行运行,我想1)只在第一个CPU上读取文件,2)以字符串形式向所有其他CPU广播内容,3)让每个CPU解析字符串。

旧版本的解析器主要执行以下操作:

while (!done) {
    int c = fgetc(infile);
    if (EOF == c) {
        if (ferror(infile)) {
            // throw some error
        }
        return;
    }
    // continue parsing
}

infile是一个FILE *。我尝试转换代码现在如下:

while (!done) {
    char cchar = iss.get(); int c = int(cchar);
    if (EOF == c) {
        if ((iss.rdstate() & ifstream::failbit ) != 0 ) {
            // throw some error
        }
        return;
    }
    // continue parsing
}

iss是一个istringstream。问题是,当达到EOF时,当前在C ++版本中抛出错误总是。所以我没有正确的模拟与恐怖。任何人都可以帮我吗?

塞巴斯蒂安

2 个答案:

答案 0 :(得分:1)

当您尝试读取但已到达文件末尾的内容时,将始终设置failbit。如果您尝试读取某些内容并且尚未到达文件末尾,则将被设置,但文件中的数据无法转换为目标类型(例如,您尝试阅读int,但该文件包含“K”)。

答案 1 :(得分:0)

如果流失败,并且您可能期望EOF,只需测试它:

// read stuff here
if ( iss.eof() ) {
    // failed, but eof is ok
}
else {
    // a real error
}

eof位仅由文件末尾设置,而不是由其他问题设置。