gpt4 book ai didi

c++ - 从 boost 序列化文件中读取会抛出异常

转载 作者:行者123 更新时间:2023-11-30 03:18:42 24 4
gpt4 key购买 nike

我是 C++ 编码的新手。我正在尝试在 visual studio 上运行此代码以从 boost 序列化二进制文件中读取,当我尝试从中读取时,它会抛出异常。

#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");
}

异常:

terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): input stream error

最佳答案

在输出文件流关闭之前打开输入文件流(不能同时打开文件进行读写)。确保首先按照@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");
}

关于c++ - 从 boost 序列化文件中读取会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54474137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com