我们通过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};
。