我们正在通过ifs
访问文件来阅读文件,我们称之为operator>>()
。
在我们当前的程序中,我们进行了一些格式化的输入操作(即使用posA
),它将我们带到流中的给定位置,让我们称之为posA
然后,想要从文件的开头重新读取char
缓冲区中的read()
。为实现这一目标,我们进行了无格式输入操作(使用posA
)。
我们在Unix操作系统下做的是用tellg()
中的值初始化// 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);
,然后转换使用它作为从文件开头的积分值偏移量:
(简化代码)
pos_type
遗憾的是,在移植代码时,我们发现tellg()
返回的std::ifstream
不一定是从流的开头偏移的字节(另请参阅this SO answer)。
这引出了一个问题:是否有一种可移植的方法来获取输入流中的当前位置(或至少是read()
)作为流/文件开头的字节数? (因此,这个值可以特别用于selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
从开头直到这个确切位置的字节。)
答案 0 :(得分:0)
唯一的办法是以二进制模式打开文件,例如std::ifstream f{filename, std::ios_base::binary};
。