如何从iStream的开头便移到字节中的偏移



我们通过std::ifstream访问文件,将其称为ifs。在当前的过程中,我们进行了一些格式化的输入操作(即使用operator>>()),这将我们带到了流中的给定位置,我们称其为 posA

然后,要从文件的开头重新阅读直到char缓冲区中的posA。为了实现这一目标,我们做了一个未形式的输入opeation(使用read())。

我们的天真方法

我们在Unix OS下进行的操作是初始化posA的CC_8,然后将其转换为从文件开头的积分值偏移:

(简化代码)

// several formatted input operations
std::istream::pos_type posA = ifs.tellg(); 
ifs.seekg(0); // rewind to the beginning of the stream
ifs.read(buffer, posA);

可悲的是,在移植代码时,我们发现tellg()返回的CC_11不一定是从流的开头的字节偏移(另请参阅此so答案)。

问题

这使我们提出了一个问题:是否有一种可移植方法将输入流中的当前位置(或至少为std::ifstream)作为从流/文件开头开始的字节数?(因此,该值可以显着用于read()字节从一开始直到确切位置)。

唯一的度假胜地是以二进制模式打开文件,例如std::ifstream f{filename, std::ios_base::binary};

相关内容

  • 没有找到相关文章

最新更新