Adm*_*mut 5 c++ iterator ifstream offset assign
我尝试将二进制文件内容的一部分读入字符串.为什么是字符串?我需要这个用于我的消息协议(使用protobuf).
以下工作非常好:
std::string* data = new std::string();
std::ifstream ifs("C:\\data.bin", std::ios::binary);
data->assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
但这是从头到尾读取文件.我想只阅读给定位置的零件.例如,从位置字节10开始:
std::string* data = new std::string();
std::ifstream ifs("C:\\data.bin", std::ios::binary);
ifs.seekg((10);
data->assign((std::istreambuf_iterator<char>(ifs)), ???????);
但是如何调整结束或偏移?我没有找到任何例子.我知道ifstream.read()有缓冲区的例子.我在整个程序中使用了assign into string方法,并且真的很想找到一种方法来实现这一点.
谁能帮我?谢谢
抱歉,但这通常是不可能的。
\n\nistreambuf_iterator该标准仅定义了s 比较相等的两种情况:
为了了解这意味着什么,请考虑标准中的示例代码实现如下equal()(N4659,\xc2\xa7[istreambuf.iterator.ops]/5):
\n\n\n返回:
\ntrue当且仅当两个迭代器都位于流末尾,或者都不位于流末尾,无论streambuf它们使用什么对象。
因此,对于任何一对迭代器,如果一个位于流末尾,而另一个不在流末尾,则它们将比较不相等。对于所有其他情况(都在流末尾,或都在流末尾),它们将比较相等(即使,例如,它们甚至不是从同一个流派生的)。
\n\n我并不完全清楚这是必需的行为,但它显然是允许的行为 - 并且不仅允许作为偶然发生的奇怪的极端情况,而且允许作为明确记录的预期行为。
\n