увеличить сериализацию в Windows vs2005, ошибка входного потока - PullRequest
0 голосов
/ 03 марта 2011

Я использую сериализацию 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 голосов
/ 03 марта 2011

Флаг std::ios::binary требуется только в Windows, где режим по умолчанию (ascii) переведет \ n \ r в \ n (и наоборот), что приведет к повреждению любых данных, которые не являются текстовыми.

Вы установили его также в экспорте?

0 голосов
/ 03 марта 2011

Наконец-то я нашел решение. Прочитайте объект, сохраните позицию с помощью Tellg, и после этого я смогу прочитать следующий объект. : -D

0 голосов
/ 03 марта 2011

Если все сериализованные данные были десериализованы в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...