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