本章首先介紹了一種新的讀寫(xiě)文件方式,使用MFC提供的CArchive類來(lái)實(shí)現(xiàn)?梢岳肅Archive類將對(duì)象數(shù)據(jù)保存到永久設(shè)備上。這樣即使應(yīng)用程序關(guān)閉,再次啟動(dòng)后仍然可以從磁盤(pán)上讀取對(duì)象數(shù)據(jù),然后在內(nèi)存中重構(gòu)相應(yīng)的對(duì)象。讓數(shù)據(jù)持久性的過(guò)程成為串行化或序列化。
CArchive對(duì)象不僅可以處理基本類型的數(shù)據(jù),還可以處理CObject類的派生對(duì)象。CArchive類重載了提取(>>)和插入(《)操作符。通過(guò)這些重載的函數(shù),可以利用CArchive對(duì)象完成對(duì)文件的讀寫(xiě)操作。
CArchive構(gòu)造函數(shù)的聲明如下:
1 CArchive( CFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL );
pFile:指向文件對(duì)象的指針,該文件對(duì)象是持久數(shù)據(jù)的來(lái)源或目的地;
nMode:文件對(duì)象的標(biāo)示符(load,store)讀取還是存儲(chǔ);
CArchive類寫(xiě)入數(shù)據(jù)的實(shí)例:
01 void CFileView::OnFileWrite()
02 {
03 CFile file(“7.txt”,CFile::modeCreate|CFile::modeWrite);
04 CArchive ar(&file,CArchive::store);
05 int i=1;
06 char ch='1';
07 float f=1.3f;
08 CString str=“www.colsir.com”;
09 ar《i《ch《f《str;
10 }
完成寫(xiě)入操作之后,用記事本打開(kāi)7.txt,發(fā)現(xiàn)基本上都是亂碼。這是因?yàn)镃Archive對(duì)象是一種二進(jìn)制流。
CArchive類讀取數(shù)據(jù)的實(shí)例:
01 void CFileView::OnFileRead()
02 {
03 CFile file(“7.txt”,CFile::modeRead);
04 CArchive ar(&file,CArchive::load);
05 int i;
06 char ch;
07 float f;
08 CString str;
09 CString strResult;
10 ar》i》ch》f》str;
11 strResult.Format(“%d,%c,%f,%s”,i,ch,f,str);
12 MessageBox(strResult);
13 }
對(duì)象讀取的順序必須和保存的順序一致,有些搞不懂,那CArchive類還有什么優(yōu)勢(shì)?暫時(shí)理解不了。
MFC新建,保存文件時(shí)的格式過(guò)濾。
在字符串表中一個(gè)ID為IDR_MAINFRAME的行,用來(lái)實(shí)現(xiàn)一些初始值的設(shè)置。該項(xiàng)的值的優(yōu)先級(jí)低于OnNewDocument函數(shù)中的設(shè)置。通過(guò)查看OnNewDocument函數(shù)的申明,可以看到OnNewDocument函數(shù)是一個(gè)虛函數(shù)。
相關(guān)推薦:
2012年計(jì)算機(jī)等考四級(jí)數(shù)據(jù)庫(kù)工程師備考筆記匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |