有没有办法验证探测read()方法对文件进行了完美的读取?

时间:2011-06-06 06:36:27

标签: c++ fstream

我希望验证读取对文件的完美读取,有没有办法?

2 个答案:

答案 0 :(得分:2)

检查状态标志:

eofbit
failbit
badbit

或检查是否抛出ios_base::failure异常

答案 1 :(得分:2)

不确定“完美阅读”是什么意思,但如果设置为failbit 流无法读取请求的字符数;在 换句话说,如果你要求20个字节,并且只有19个可用,那么 读取被视为失败。

测试失败的常用方法是将流视为 布尔值,例如:

if ( input ) //  succeeded

if ( ! input ) //  failed

(这也需要考虑badbit,如果存在的话,将会设置istream::read 在阅读时是一个实际的I / O问题。)

如果是istream::gcount,您可能还想查看 istream::gcount如果失败; while ( input.read(...) || input.gcount() != 0 ) { // process input.gcount() characters... } 返回 最后一次未格式化读取所读取的字符数,即使是在 失败。因此,在读取原始数据时,使用它并不常见 类似的东西:

{{1}}

这与通常的习语略有不同,后者一旦停止就会停止 输入失败。