我已經寫了兩個實例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