2012-02-26 28 views
3

有没有办法可以检查ostream的istream是否可以搜索?C++如何检查流(iostream)是否可搜索

我怀疑做了一个测试寻找和检查failbit是不正确的 因为寻找可能因为不相关的原因失败。

我需要这个在Linux和Mac上工作,如果这有所作为。

+2

但是,如果寻找由于*无关的原因(如您所说)失败,那么无论原因如何,它仍然意味着流不可搜索。 – Nawaz 2012-02-26 06:19:29

回答

5

Iostreams不给你太多。流对象只是从类std::streambuf派生的缓冲对象周围的包装。 (假设“窄”字符。)标准衍生缓冲区类别为std::stringbuf(字符串)和std::filebuf(用于文件)。假设你只对文件感兴趣,std::filebuf只是C库函数的一个简单包装。 C库没有定义一种方法来确定对象是否支持寻找,除了尝试这么做,C++也不支持。

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

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