使用 boost 序列化到磁盘后无法加载数据
Couldn't load data back after serializing onto disk using boost
我能够使用boost序列化将数据保存到磁盘上。但是,我无法取回数据。你能告诉我我做错了什么吗?
谢谢你,
以下是我的代码
void nDB::save_macros(string filename) {
std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
//assert(ofs.good());
boost::archive::binary_oarchive oa(ofs);
oa << this;
}
void nDB::load_macros(string filename) {
std::ifstream ifs(filename.c_str());
//assert(ifs.good());
boost::archive::binary_iarchive ia(ifs);
nDB *db = new nDB;
ia >> db;
*this = *db;
}
下面是我的序列化实例化
template<class Archive>
void nDB::serialize(Archive &ar, const unsigned int version) {
boost::unordered_map<string,macro*,myhash,cmp_str>::iterator M_IT;
boost::unordered_map<string,layer*,myhash,cmp_str>::iterator L_IT;
for (L_IT = _LAYERS.begin();L_IT != _LAYERS.end();L_IT++) {
string tmpstr = L_IT->first;
//ar & L_IT->first;
ar & tmpstr;
ar & *(L_IT->second);
}
for (M_IT = _MACROS.begin();M_IT != _MACROS.end();M_IT++) {
string tmpstr = M_IT->first;
//ar & M_IT->first;
ar & tmpstr;
ar & *(M_IT->second);
}
}
以下是我保存运行的运行结果:
将mac1宏插入数据库确定
将mac2宏插入数据库确定
将mac3宏插入数据库确定
插入端口P1 OK
插入端口P2 OK
插入端口P2 OK
插入端口P3 OK
插入端口P1 OK
插入端口P3 OK
找到mac3层
宏mac3具有以下端口:
找到端口P3
找到端口P1
宏mac3的端口P3已使用CLOCK和dir INOUT
宏mac3的端口P1已使用POWER和dir OUTPUT
下面是我加载运行的结果
错误::在数据库中找不到宏mac3
我认为您在nDB::serialize
方法中做得太多了。
如果您只为macro
和layer
类提供serialize
方法,BoostSerialize将很乐意为您序列化映射。一旦你写了这些,你应该能够将给定的方法简化为这样的东西:
template<class Archive>
void nDB::serialize(Archive &ar, const unsigned int version) {
ar & _LAYERS;
ar & _MACROS;
}
我没有详细介绍它,但我注意到您打开输入流和输出流的方式不同。。。
在save_macros
:中
std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
在load_macros
:中
std::ifstream ifs(filename.c_str());
这可能是问题所在吗?
相关文章:
- 使用ifstream从DAT文件加载数据
- SqlDataAdapter 未加载数据表 - C++
- C ,MySQL API加载数据本地
- 使用提升库在队列和堆栈数据结构上保存和加载数据时出错
- 使用 fstream 从文件加载数据
- 从文件加载数据
- 将错误处理添加到加载数据的函数(但有时还需要使用默认值)
- C#从文件加载数据并分类为数组
- 保存/加载C++数据时出错
- C++简体版链表,当我加载数据以创建链表并输入更多数据时,似乎存在差距
- 我无法加载数据文件,总是无法打开它
- 从C++模拟中保存和加载数据的有效方法
- 快板 5 加载数据文件
- 通过C++虚幻引擎改进加载数据
- 使用套接字从页面加载数据
- 创建缓冲区以加载数据时出错
- 使用 boost 序列化到磁盘后无法加载数据
- 从C++中的CSV文件读取和加载数据时出现问题
- 如何在运行时通过插件机制动态加载数据类型
- 保存和加载数据C++