在Windows vs2005中提升序列化问题,输入流错误

时间:2011-03-03 08:35:36

标签: c++ windows serialization boost

我正在使用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输入流错误。我可以看到我在文件中所有我想要的东西,所以,我不知道为什么我有这个例外。我能做什么?有什么想法吗?

3 个答案:

答案 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