利用序列化進行檔案讀寫

2021-10-01 04:55:41 字數 1111 閱讀 3497

在很多應用中我們需要對資料進行儲存,或是從介質上讀取資料,這就涉及到檔案的操作。我們可以利用各種檔案訪問方法完成這些工作,但mfc中也提供了一種讀寫檔案的簡單方法——「序列化」。序列化機制通過更高層次的介面功能向開發者提供了更利於使用和透明於位元組流的檔案操縱方法,舉乙個例來講你可以將乙個字串寫入檔案而不需要理會具體長度,讀出時也是一樣。你甚至可以對字串陣列進行操作。在mfc提供的可自動分配記憶體的類的支援下你可以更輕鬆的讀/寫資料。你也可以根據需要編寫你自己的具有序列化功能的類。

序列化在最低的層次上應該被需要序列化的類支援,也就是說如果你需要對乙個類進行序列化,那麼這個類必須支援序列化。當通過序列化進行檔案讀寫時你只需要該類的序列化函式就可以了。

怎樣使類具有序列化功能呢?你需要以下的工作:

該類從cobject派生。 在類宣告中包括declare_serial巨集定義。 提供乙個預設的建構函式。 在類中實現serialze函式 使用implement_serial指明類名和版本號

下面的**建立了乙個簡單身份證記錄的類,同時也能夠支援序列化。

in h struct strpid ; class callpid : public cobject ;

in cpp implement_serial(callpid,cobject,1) // version is 1,版本用於讀資料時的檢測 void callpid::serialize(carchive& ar) } else } }

當然上面的**很不完整,但已經可以說明問題。這樣callpid就是乙個可以支援序列化的類,並且可以根據記錄的數量動態分配記憶體。在序列化中我們使用了carchive類,該類用於在序列化時提供讀寫支援,它過載了《和》運算符號,並且提供read和write函式對資料進行讀寫。

下面看看如何在文件中使用序列化功能,你只需要修改文件類的serialize(carchive& ar)函式,並呼叫各個進行序列化的類的serial進行資料讀寫就可以了。當然你也可以在文件類的內部進行資料讀寫,下面的**利用序列化功能讀寫資料:

class cyourdoc : public cdocument

void cyourdoc::serialize(carchive& ar) m_allpid.serialize(ar);//呼叫資料類的序列化函式

}

利用Boost庫進行序列化

第一部分 vs2010 boost 安裝到指定目錄下,例如 二 在vs2010中使用boost庫 配置lib路徑 第二部分 序列化 我們希望能夠將類物件的成員變數中的值儲存下來,以便下次直接恢復使用。這可以通過序列化來實現,即將這些變數值保持下來,以後需要時直接將保持值恢復到類物件的成員變數中。簡言...

Python 檔案讀寫 序列化 反序列化和JSON

讀檔案 f open users michael test.txt r 開啟檔案 f.read 讀檔案 f.close 關閉檔案 由於檔案讀寫時都有可能產生ioerror,一旦出錯,後面的f.close 就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try finally來實...

用讀寫操作複製檔案,csv ,序列化和反序列化

用讀寫操作複製檔案 r 只能讀 w 只能寫 覆蓋整個檔案 不存在則建立 a 只能寫 從檔案底部新增內容 不存在則建立 rb 以二進位制讀方式開啟,只能讀檔案 如果檔案不存 在,會發生異常 wb 以二進位制寫方式開啟,只能寫檔案,如果檔案不存 在,建立該檔案 如果檔案已存在,先清空,再開啟檔案 fil...