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