我正在使用boost序列化来序列化对象。在Linux中一切顺利,但在Windows中我遇到了反序列化数据的问题:
std::ifstream ifs(dataFilename.str().c_str(), std::ios::in | std::ios::binary);
{
boost::archive::binary_iarchive persistenceFile(ifs);
persistenceFile >> activeMessageAux;
persistenceFile >> activeMessageAux2;
}
并且在第二次反序列化到activeMessageAux2时总是失败,收到boost::archive::archive_exception
输入流错误。我可以看到我在文件中所有我想要的东西,所以,我不知道为什么我有这个例外。我能做什么?有什么想法吗?
答案 0 :(得分:0)
如果已将整个序列化数据反序列化为activeMessageAux
,为什么不能仅使用正常分配来填充activeMessageAux2
?
std::ifstream ifs(dataFilename.str().c_str(), std::ios::in | std::ios::binary);
{
boost::archive::binary_iarchive persistenceFile(ifs);
persistenceFile >> activeMessageAux;
}
activeMessageAux2 = activeMessageAux;
答案 1 :(得分:0)
仅在Windows中需要标记std::ios::binary
,其中默认模式(ascii)将\ n \ r转换为\ n(反之亦然),从而破坏任何非文本数据。
您是否也在导出中设置了它?
答案 2 :(得分:0)
最后我找到了解决方案。读取一个对象,用tellg保存位置,之后我可以读取下一个对象。 :-D