C++ windows vs2005中的boost序列化问题,输入流错误

C++ windows vs2005中的boost序列化问题,输入流错误,c++,windows,serialization,boost,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;

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

如果全部序列化数据已反序列化为
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;

只有在Windows中才需要标志
std::ios::binary
,默认模式(ascii)将\n\r转换为\n(反之亦然),从而损坏任何非文本数据


您在导出中也设置了吗?

最后我找到了一个解决方案。读取一个对象,用tellg保存位置,然后我可以读取下一个对象:-对不起,我根本没有解释。。。在我的持久性文件中,存储了多个对象。所以,当我制作第二个>>时,我试图将对象存储在第二个位置…@opernas:我已经有几年没有使用boost.serialization了,但我记得它不是这样工作的。如果希望单个文件包含多个序列化对象的数据,则应序列化/反序列化单个数组/std::vector对象。。。ofs流的std::of(dataFilename.str().c_str(),std::ios::binary | std::ios::app);boost::archive::binary_-oarchive-persistenceFile(ofs);persistenceFile否-如果它在两个位置都是二进制的,那么它是正确的。我看到的唯一一件事——你每次都在追加。是否有可能因为开发而存在一些损坏的数据,然后仅仅删除一次文件就足够了,以便清除所有内容?