我已经写了一个名为Cookie的结构的两个实例ck1,ck2,并通过调用一个函数将它们保存在一个名为“ 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。我怎么做?Cookie看起来像这样:
struct Cookie {
std::string name;
std::string value;
unsigned short duration;
bool expired;
};
谢谢
如果是POD ,则类似于编写但阅读它们Cookie
:
std::ifstream ifs(fname,std::ios::binary);
Cookie ck3, ck4;
ifs.read((char *) &ck3, sizeof(Cookie));
ifs.read((char *) &ck4, sizeof(Cookie));
另外,您应该检查每个打开和读取操作的结果并进行处理。
更新:更新后看到Cookie
,您不能简单地将其写入文件。您应该对其进行序列化或制定明确的协议以读取/写入数据。
一个简单的解决方法是(阅读评论):
// Assume name and value are not longer that 99
// and you don't care about wasted space in the file
struct CookiePOD {
CookiePOD(const Cookie &p)
{
// I ignored bound checking !
std::copy(p.name.begin(), p.name.end(), name);
name[p.name.size()] = 0;
std::copy(p.value.begin(), p.value.end(), value);
value[p.value.size()] = 0;
duration = p.duration;
expired = p.expired;
}
char name[100];
char value[100];
unsigned short duration;
bool expired;
};
然后尝试读取/写入CookiePOD
而不是Cookie
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句