“istreambuf_iterator”后读取文件失败

时间:2015-09-11 05:25:40

标签: c++ ifstream

我想查找文本文件中的行数,但在执行istreambuf_iterator后我无法读取内容。

std::ifstream loadfile("file.txt");
line_count = std::count(std::istreambuf_iterator<char>(loadfile), std::istreambuf_iterator<char>(), '\n');
double val;
loadfile >> val ;

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你读到文件的末尾,所以没有值可读也就不足为奇了。如果您打算从文件的开头读取该值,则需要重置读指针:

loadfile.seekg( 0, std::ios::beg );

执行这样的行计数然后返回读取数据有点不寻常,因为它无法转换为通用流(例如,如果您的程序要接收标准输入的数据)。如果解析是基于行的,则通常使用以下模式:

int line_count = 0;
for( std::string line; std::getline( loadfile, line ); )
{
    ++line_count;
    std::istringstream iss( line );

    // Read values on current line from 'iss'.
}

// Now that you're finished, you have a line count.