【发布时间】:2012-09-30 20:30:25
【问题描述】:
我目前正在为一些 IO 操作编写一个类。一些函数返回 IO 操作是否成功。如果我正在读取一个文件,不知是否应该返回std::ifstream::good()或!std::ifstream::fail()来表示IO操作是否成功。
区别来自eof 位,我不确定我是否正确理解它。
假设我有一个包含 4 个字节(1 个整数)的二进制文件。
假设我读取了这个整数。
我的问题是:eof 标志会在此操作之后还是在下一个 IO 操作之后设置(这将失败)?
如果在这个操作之后直接设置,如果我的读取函数返回std::ifstream::good(),那么结果将是false(但是整数被正确读取了)。
你能解释我什么时候设置了 eof 位,我应该在函数结束时返回什么?
【问题讨论】:
-
与其实现您自己的
istream类对象,不如考虑从std::streambuf派生并通过其rdbuf()函数将其包装在实际的istream中。你只需要实现streambuf的几个功能,就可以免费获得istream的所有花里胡哨。 (不确定这对您的情况是否有帮助!)
标签: c++ io stream ifstream eof