孫鑫VC 第13章文件和序列化

2021-06-09 07:42:42 字數 1860 閱讀 2869

第13章  文件與序列化

1.      使用carchive類對檔案進行讀寫操作

carchive類物件將物件資料儲存到永久裝置上,例如磁碟檔案,讓物件資料永續性的過程就稱之為序列化(活序列化);

在建立carchive物件之前必須先建立乙個cfile類或者其派生類物件,並且因此存檔物件既可以用來載入資料,也可以用來儲存資料,所以確保這個cfile類物件的開啟方式與該文件物件的載入/儲存狀態相一致。

2.      寫操作

//先構造cfile檔案物件

cfilefile("1.txt",cfile::modecreate | cfile::modewrite);

//構造存檔物件

carchivear(&file,carchive::store);

inti=4;

charch='a';

//在c++中,浮點數預設情況下是定義為double型別,所以後面加個f

floatf=1.3f;

cstringstr("");

//儲存資料

ar<3序列化讀取操作

//構造cfile檔案物件

cfilefile("1.txt",cfile::moderead);

//構造存檔物件

carchive ar(&file,carchive::load);

int i;

char ch;

float f;

cstring str;

cstring strresult;

//讀取資料,注意順序要跟儲存的一致

ar>>i>>ch>>f>>str;

strresult.format("%d,%c,%f,%s",i,ch,f,str);

messagebox(strresult);

3.      mfc框架提供的檔案新建功能

c**doc類中的onnewdocument函式就是【檔案/新建】命令處理的一部分,由框架呼叫;

4.      也可以在idr_mainframe字串資源裡面修改文件標題

第乙個\n和第二個\n之間的值就是

6.      在函式前面有afx_msg識別符號,說明這是個選單命令響應函式;

7.      當程式執行時候,mfc框架內部接收的無論是文件類指標、框架類指標、或者是視類指標,它們都是指向派生類的指標;

8.      文件序列化:文件類的serialize函式

serialize函式就是文件類提供的用來儲存和載入資料的函式,我們可以利用其引數提供的carchive物件來儲存或者載入我們自己的資料;

注意:當儲存後直接開啟是開啟不了的,除非你更好了另外乙個文件類物件再重新開啟

9.      對於多文件程式來說,每開啟乙個檔案都會構造乙個新的文件物件,但是注意單文件不同,對於單文件來說,文件物件本身不會被銷毀,它只是將資料清空,然後再與乙個新的檔案關聯;

10.  實現乙個類可序列化,有5個步驟(看書)

乙個可序列化的類通常都有乙個serialize成員函式

11.  對於乙個文件類物件來說,可以有多個視類物件與相關;

但對乙個視類物件來說,它只能與乙個文件類物件相關;

12.  當先前儲存資料的版本號跟現在讀取時資料的版本號不一致的時候,就會彈出警告框:非預期的檔案格式;

13.  mfc的document/view結構:

有關檔案讀寫的操作,在cdocument的serialize函式中進行;

有關資料和圖形顯示的操作在cview的ondraw函式中進行;

14.  deletecontents函式是乙個虛函式,主要是由框架呼叫,用來刪除文件的資料,同時並不銷毀cdocument物件本身,它是在文件將要被銷毀之前被呼叫,它也會在該文件物件再重複使用之前被呼叫,以確保文件是空的。

vc文件序列化

1.carchive在選單開啟儲存時的 cfile file 1.txt cfile modecreate cfile modewrite carchive ar file,carchive store int i 4 char ch a float f 1.3f cstring str ar 以上...

孫鑫VC 第15章多執行緒

第15章 1.程序從來不執行任何東西,它只是執行緒的容器。若要使程序完成某項操作,它必須擁有乙個在它環境中執行的執行緒,此執行緒負責執行包含在程序的位址空間中的 即,真正完成 執行的是執行緒,而程序只是執行緒的容器,或者說是執行緒的執行環境 2.頁檔案透明的為應用程式增加了可以使用的記憶體。它通過在...

孫鑫VC 第17章程序間的通訊

第17章 程序間的通訊 1.當乙個程序啟動後,作業系統為其分配4gb的私有位址空間。位於同乙個程序中的多個執行緒共享同乙個位址空間,因此執行緒之間的通訊非常簡單 2.四種程序間通訊方式 剪下板,匿名管道,命名管道,郵槽 3.如果某個程式已經開啟了剪貼簿,則其他應用程式將不能修改剪下板,直到前者呼叫了...