我已经写了两个实例CK1读取多个结构,一个结构的CK2名为Cookie和在名为“mydat”二进制文件调用一个函数,拯救他们:如何从一个二进制文件
bool s_cookie(Cookie myck,std::string fname) {
std::ofstream ofs(fname,std::ios::binary | std::ios::app);
if(!ofs) return false;
ofs.write((char *) &myck, sizeof(Cookie));
ofs.close();
return true;
}
的
当然,myck可以是ck1,ck2等,而fname代表“mydat”二进制文件。所以这两个结构都保存在同一个文件中。 现在我想分别将它们读回到ck3和ck4。我怎么做?饼干看起来是这样的:
struct Cookie {
std::string name;
std::string value;
unsigned short duration;
bool expired;
};
感谢
你能提供'Cookie'的定义吗?它只是一个POD结构? –
刚刚添加到编辑检查出来 –
这就是问题所在。您不能使用二进制I/O将这样的结构保存到文件中。二进制I/O在std :: string上不起作用。原因是std :: string包含内部指针,指针不能被有意地保存到文件中。所以你运气不好,你必须尝试另一种方式。使用二进制I/O保存字符串的常用方法是首先保存字符串的长度,然后保存字符本身。然后当你阅读时你也是这样做的,阅读字符串的长度,为字符分配内存,读取字符。 – john