我们通过 std::ifstream
访问一个文件,我们称它为 ifs
。
在我们当前的过程中,我们进行了一些格式化的输入操作(即使用 operator>>()
),这将我们带到流中的给定位置,我们称之为 posA
然后,要从文件的开头重新读取,直到char
缓冲区中的posA
。为此,我们进行了无格式输入操作(使用 read()
)。
我们天真的方法
我们在 Unix 操作系统下所做的是用 tellg()
中的值初始化 posA
,然后将其转换为从开始处偏移的整数值文件:
(简化代码)
// 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()
返回的 pos_type
不一定是流开头的字节偏移量(另见 this SO answer ) .
问题
这让我们想到了一个问题:是否有一种可移植的方法来获取输入流(或至少是 std::ifstream
)中的当前位置作为从开始的字节数流/文件? (所以这个值尤其可以用于 read()
从开始到这个确切位置的字节)。
最佳答案
唯一的办法是以二进制模式打开文件,例如std::ifstream f{filename, std::ios_base::binary};
.
关于c++ - 如何从 istream 的开头可移植地获取以字节为单位的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997629/