Re: [c++] 請高手幫幫我~如何將物件寫入檔案內
※ 引述《Sevesdion.bbs@bbs.wretch.cc (薛丁格的貓)》之銘言:
: ※ 引述《march20.bbs@ptt.cc》之銘言:
: > 不是很懂你想要做什麼, 請先舉個簡單的例子說明一下, 這樣才能幫上忙 @@
: > 我猜你是想問, 有沒有辦法開個 binary file,
: > 然後有個 function 可以幫你把 map 的內容寫到這檔案去?
: > 如果是這樣, 那你只能硬幹了.
: > 請用 iterator 將 map 的內容一筆一筆寫到檔案吧.
: > (讀取時, 一筆一筆讀進來放回 map 去)
: > 之所以會這樣, 是因為開發 compiler 的各家公司對 STL 的實作不同,
: > physical layout 當然也就沒統一標準,
: > 更別提統一的標準來輸入輸出 map 的內容了.
: > (btw, 如果是 java 就簡單多了, 因為 java 提供 persistent storage @@)
: 抱歉 沒把問題說清楚
: 若有一個 structure 如下
: struct obj{
: map<string,string> foo;
: map<string, map<string,int> > foo_2;
: string foo_3;
: }ex;
: 某段程式碼如下:
: ofstream WriteFile("test.dat",ios::binary);
: [processing code]
: WriteFile.close();
: 我的問題是 如何在[processing code]這邊 將ex的所有內容存到 test.dat 裡面.
: 有沒有簡單容易的方式 將 ex 的記憶體內容 寫到 test.dat
: 反過來, 讀取的時候 將 test.dat 的內容 直接搬到 ex.
沒有, 原因就像之前說的.
: 我提供一個暴力的方法
只能這樣做.
: 這個問題可以用硬幹的方法, 也就是將 ex 的每個member 的每一筆資料慢慢寫入
: 但是寫好之後 要讀取時
: 我不知道 foo 的資料是否讀完了 而要開始讀 foo_2 或是 foo_3 的資料
所以你要提供額外的資訊.
比如在輸出 foo 前, 先輸出一個 integer, 用來表示該 map 的資料筆數.
同理, 輸出 foo2, foo3 前, 先輸出 integer, 代表 foo2 的資料筆數及 foo3 的長度
可用的方法還有很多, 像是用 marker 標出該 field 的範圍,
(原理跟 C 裡的表示 string literal 語法類似)
: 因為沒法判定 所以卡住了 ^^
: 還是請各位高手幫小弟的忙 謝謝 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 71.137.87.35
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章