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

Is there a way to verify to probe that read() method made a perfect read on a file?

本文关键字:文件 完美 读取 是否 验证 read 方法 有没有      更新时间:2023-10-16

>我想要验证读取是否对文件进行了完美的读取,有没有办法?

检查状态标志:

eofbit
failbit
badbit

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

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

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

if ( input ) //  succeeded

if ( ! input ) //  failed

(这也考虑了badbit,如果有,将设置该是读取时的实际 I/O 问题。

istream::read的情况下,您可能还需要检查 istream::gcount在发生故障的情况下; istream::gcount返回上次无格式读取读取的字符数,即使在失败。 因此,在读取原始数据时,使用像这样:

while ( input.read(...) || input.gcount() != 0 ) {
    //  process input.gcount() characters...
}

这与通常的成语略有不同,后者在输入失败。