5

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

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

我需要它才能在 Linux 和 mac 上工作,如果这有所作为的话。

4

1 回答 1

7

Iostreams 并没有给你太多。Stream 对象只是从 class 派生的缓冲区对象的包装器std::streambuf。(假设“窄”字符。)标准派生缓冲区类std::stringbuf用于字符串和std::filebuf文件。假设您只对文件感兴趣,std::filebuf这只是 C 库功能的简单包装。FILE除了尝试这样做之外,C 库没有定义确定对象是否支持查找的方法,C++ 也没有。

对于它的价值,语义seek有所不同。某些平台可能允许您“寻找”管道,但仅限于当前位置,以确定已读取或写入的字符数。寻找结束可能会调整文件大小,或者可能导致下一次写入操作调整文件大小,或者介于两者之间。

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

于 2012-02-26T07:01:26.350 回答