Чтение из ускоренного сериализованного файла вызывает исключение - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в кодировании c ++.Я пытаюсь запустить этот код на визуальных студиях для чтения из бинарного сериализованного двоичного кода, и когда я пытаюсь читать из него, он выдает исключение.

#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>


using boost::serialization::make_binary_object;

enum class Example : uint32_t {
    A = 1,
    B = 2,
};

int main() {
    int data = 5;

    std::ofstream f("data.dat", std::ios::binary);
    boost::archive::binary_oarchive ar(f);
    ar << make_binary_object(&data, sizeof(data));

    uint32_t restored_info;
    std::ifstream Obj_ifstream("data.dat", std::ios::binary);
    boost::archive::binary_iarchive ip_archive(Obj_ifstream);
    ip_archive >> restored_info;

    std::cout << "Testing " << std::endl;
    system("PAUSE");
}

Исключение:

прекращение вызова после создания экземпляра 'boost :: archive :: archive_exception'
what (): inputошибка потока

1 Ответ

0 голосов
/ 01 февраля 2019

Вы открываете поток входного файла до закрытия потока выходного файла (вы не можете открыть файл для чтения и записи одновременно).Обязательно сначала закройте его, как упомянуто @ rafix07 в его комментарии, или инкапсулируйте блоки кода следующим образом:

#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>


using boost::serialization::make_binary_object;

enum class Example : uint32_t {
    A = 1,
    B = 2,
};

int main() {
    int data = 5;

    {
        std::ofstream f("data.dat", std::ios::binary);
        boost::archive::binary_oarchive ar(f);
        ar << make_binary_object(&data, sizeof(data));
    }
    {
        uint32_t restored_info;
        std::ifstream Obj_ifstream("data.dat", std::ios::binary);
        boost::archive::binary_iarchive ip_archive(Obj_ifstream);
        ip_archive >> restored_info;
        std::cout << "restored ino " << restored_info << std::endl;
    }

    std::cout << "Testing " << std::endl;
    system("PAUSE");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...