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

时间:2012-02-26 06:08:20

标签: c++ linux seekg

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

我怀疑进行测试搜索并检查failbit是不正确的 因为寻求可能因为无关的原因而失败。

我需要这个才能在Linux和Mac上运行,如果这有所不同的话。

1 个答案:

答案 0 :(得分:5)

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

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

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