【问题标题】:C++ how to check if a stream (iostream) is seekableC ++如何检查流(iostream)是否可搜索
【发布时间】:2012-03-16 02:22:13
【问题描述】:

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

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

我需要它在 Linux 和 mac 上工作,如果这有影响的话。

【问题讨论】:

  • 但是,如果由于 unrelated 原因(如您所说)而搜索失败,那么它仍然意味着流不可搜索,无论原因是什么。

标签: c++ linux seekg


【解决方案1】:

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

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

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

【讨论】:

  • 我问了一个问题here,它被提议作为这个问题的副本,询问“尝试这样做”是否可行。如果是这样,至少它是一种方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多