有没有办法检查 ostream 的 istream 是否可搜索?
我怀疑进行测试搜索并检查故障位是不正确的,因为搜索可能由于不相关的原因而失败。
我需要它才能在 Linux 和 mac 上工作,如果这有所作为的话。
Iostreams 并没有给你太多。Stream 对象只是从 class 派生的缓冲区对象的包装器std::streambuf
。(假设“窄”字符。)标准派生缓冲区类std::stringbuf
用于字符串和std::filebuf
文件。假设您只对文件感兴趣,std::filebuf
这只是 C 库功能的简单包装。FILE
除了尝试这样做之外,C 库没有定义确定对象是否支持查找的方法,C++ 也没有。
对于它的价值,语义seek
有所不同。某些平台可能允许您“寻找”管道,但仅限于当前位置,以确定已读取或写入的字符数。寻找结束可能会调整文件大小,或者可能导致下一次写入操作调整文件大小,或者介于两者之间。
您也可以尝试检查errno
是否badbit
已设置(或者,我更喜欢使用异常而不是标志)。