C++如何检查流(iostream)是否可查找



有没有办法检查ostream的istream是否可查找?

我怀疑进行测试查找和检查故障位是不正确的因为搜寻可能由于不相关的原因而失败。

我需要这个在Linux和mac上工作,如果这有区别的话。

Iostreams不会给您带来太多好处。流对象只是从类std::streambuf派生的缓冲区对象的包装器。(假定为"窄"字符。)标准派生的缓冲区类对于字符串为std::stringbuf,对于文件为std::filebuf。假设您只对文件感兴趣,std::filebuf只是C库功能的一个简单包装器。C库没有定义一种方法来确定FILE对象是否支持查找,除了尝试这样做之外,C++也没有。

就其价值而言,seek的语义有点不同。有些平台可能允许您"查找"管道,但只能查找到当前位置,以确定读取或写入了多少字符。搜索超过末尾可能会调整文件大小,或者可能导致下一次写入操作调整文件大小或介于两者之间。

如果设置了badbit(或者,我更喜欢使用异常而不是标志),您也可以尝试检查errno

最新更新