第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.如果某個程式已經開啟了剪貼簿,則其他應用程式將不能修改剪下板,直到前者呼叫了...