VC++案例教程:第8章 文件的存取_第1頁(yè)
VC++案例教程:第8章 文件的存取_第2頁(yè)
VC++案例教程:第8章 文件的存取_第3頁(yè)
VC++案例教程:第8章 文件的存取_第4頁(yè)
VC++案例教程:第8章 文件的存取_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第8章保存和恢復(fù)工作 -文件的存取河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院2008年12月VC+案例教程VC+案例教程 北大出版社教學(xué)目標(biāo):掌握自定義類(lèi)的串行化方法和過(guò)程。熟悉CFile類(lèi)的使用。VC+案例教程 北大出版社案例介紹日常生活中,每個(gè)人都有一個(gè)或多個(gè)通訊錄,用來(lái)保存同學(xué)、同事、親朋好友、生意伙伴等的聯(lián)系信息。但是傳統(tǒng)的通訊錄對(duì)這些信息不方便進(jìn)行管理,特別是當(dāng)聯(lián)系人很多時(shí),需要查詢某個(gè)人的信息變得很困難。所以我們需要一個(gè)電子通訊錄來(lái)存儲(chǔ)聯(lián)系人的信息。本章將通過(guò)兩種方法來(lái)編寫(xiě)通訊錄程序,一是串行化,二是CFile類(lèi)。 VC+案例教程 北大出版社教學(xué)內(nèi)容:8.1 文檔串行化8.2 CFile類(lèi) VC+案

2、例教程 北大出版社8.1 文檔串行化 用戶處理的數(shù)據(jù)往往需要存盤(pán)作永久備份。將文檔類(lèi)中的成員變量的值以文件形式存儲(chǔ)在磁盤(pán)中,或者將文件中的數(shù)據(jù)讀取到相應(yīng)的成員變量,從而恢復(fù)應(yīng)用程序中的對(duì)象。這個(gè)過(guò)程稱(chēng)為文檔的串行化。串行化分為兩個(gè)部分當(dāng)應(yīng)用程序數(shù)據(jù)以文件形式存儲(chǔ)在磁盤(pán)中時(shí),叫做串行化。當(dāng)從文件中恢復(fù)應(yīng)用程序的狀態(tài)時(shí),則叫做反串行化。VC+案例教程 北大出版社8.1.1 對(duì)象串行化 Visual C+應(yīng)用程序中的串行化是通過(guò)Archive類(lèi)來(lái)實(shí)現(xiàn)的。CArchive類(lèi)不能離開(kāi)它所依附的CFile類(lèi)對(duì)象而孤立存在。CArchive類(lèi)用于Visual C+應(yīng)用程序中文檔和數(shù)據(jù)對(duì)象的 Serializ

3、e函數(shù)中。VC+案例教程 北大出版社8.1.2 使對(duì)象可串行化 要使自己定義的類(lèi)對(duì)象能夠被保存或被恢復(fù),必須做三件事:直接或間接從CObject類(lèi)公有派生;添加兩個(gè)宏: DECLARE_SERIAL和 IMPLEMENT_SERIAL,定義Serialize函數(shù)。 VC+案例教程 北大出版社8.1.3 案例8.1 串行化實(shí)現(xiàn)通訊錄 【例8.1】編寫(xiě)一個(gè)基于單文檔的程序,利用串行化功能實(shí)現(xiàn)對(duì)通訊錄的管理,要求能夠?qū)崿F(xiàn)對(duì)通訊錄的添加、刪除、瀏覽、查找等功能,運(yùn)行效果見(jiàn)圖8.2。圖 8.2 串行化實(shí)現(xiàn)通訊錄程序 VC+案例教程 北大出版社8.1.3. l 創(chuàng)建項(xiàng)目 利用AppWizard創(chuàng)建一個(gè)單文

4、檔應(yīng)用程序,取名為AddressBook_Serial。在第四步中,指定應(yīng)用程序?qū)?chuàng)建和讀取的文件的擴(kuò)展名為adr。在第六步,指定CFormView作為視圖類(lèi)的基類(lèi),這將允許使用對(duì)話框編輯器進(jìn)行應(yīng)用程序的界面設(shè)計(jì)。 VC+案例教程 北大出版社8.1.3.2 應(yīng)用程序界面設(shè)計(jì) 窗口布局如圖8.3所示,其中的控件及其屬性見(jiàn)表8-l。將表8-2中的變量關(guān)聯(lián)到指定的控件。 VC+案例教程 北大出版社8.1.3.3 創(chuàng)建新類(lèi)并串行化 創(chuàng)建新類(lèi)CAddressList,基類(lèi)為CObject。 CPerson類(lèi)的定義見(jiàn)教材。將類(lèi)串行化 (1)添加Serialize函數(shù) (2)添加DECLARE_SERIAL

5、宏 在CAddressList類(lèi)的頭文件(AddressList.h)中,加入DECLARE_SERIAL(CAddressList) (3)添加IMPLEMENT_SERIAL宏 在AddressList.cpp文件中構(gòu)造函數(shù)定義之前, 加入 IMPLEMENT_SERIAL(CAddressList, CObject, 1)VC+案例教程 北大出版社8.1.3.4 在文檔類(lèi)中建立支持 為了保存和處理大量CAddressList類(lèi)對(duì)象,本例使用MFC中的CObArray類(lèi),在文檔類(lèi)中添加兩個(gè)私有訪問(wèn)權(quán)限的成員變量,如表8-3所示。 添加新的記錄 定位記錄(1)取得當(dāng)前記錄 (2)取得第一條記

6、錄(3)取得下一條記錄 (4)取得上一條記錄 (5)取得最后一條記錄對(duì)象數(shù)組串行化 清除文檔內(nèi)容 打開(kāi)新文檔 刪除當(dāng)前記錄 取得記錄總數(shù) VC+案例教程 北大出版社8.1.3.5 為視圖類(lèi)增加定位和編輯支持 l. 顯示當(dāng)前記錄2. 在記錄集中定位 3. 保存編輯和更改4. 顯示新記錄集 5. 刪除記錄6. 查詢記錄7. 編譯運(yùn)行程序 VC+案例教程 北大出版社8.2 CFile類(lèi) 在MFC面向?qū)ο蟮木幊谭绞较?,有關(guān)文件的輸入和輸出都是由CFile類(lèi)完成的。CFile是以二進(jìn)制方式讀取和寫(xiě)入文件的類(lèi),是MFC中其他所有文件類(lèi)的基類(lèi),它封裝了Win32 API 用來(lái)處理文件I/O的那部分函數(shù)。 V

7、C+案例教程 北大出版社8.2.1 CFile類(lèi)的操作 在Visual C+中,數(shù)據(jù)文件的操作通常按照打開(kāi)(或創(chuàng)建)文件、進(jìn)行讀寫(xiě)操作、關(guān)閉文件的步驟進(jìn)行。一個(gè)文件必須打開(kāi)或創(chuàng)建之后才能使用。在文件操作中,把內(nèi)存中的數(shù)據(jù)傳送到外部存儲(chǔ)設(shè)備,并保存為文件的操作叫做寫(xiě)文件。而把數(shù)據(jù)文件中的數(shù)據(jù)傳送到內(nèi)存中的操作叫做讀文件。在對(duì)一個(gè)文件的讀寫(xiě)操作完成后,一定要將打開(kāi)的文件關(guān)閉。否則,各種各樣的操作就有可能對(duì)文件造成難以預(yù)料的破壞。 VC+案例教程 北大出版社8.2.1.l 打開(kāi)文件用CFile類(lèi)的構(gòu)造函數(shù)打開(kāi)文件。CFile類(lèi)提供了三個(gè)構(gòu)造函數(shù):CFile( ); CFile( int hFile

8、); CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); 參數(shù)nOpenFlags 指定文件的打開(kāi)方式,其取值見(jiàn)表8-4。用CFile:Open函數(shù)打開(kāi)文件。 CFile file;file.Open(MyFile.txt,CFile:modeRead ); VC+案例教程 北大出版社8.2.1.2 創(chuàng)建文件要?jiǎng)?chuàng)建一個(gè)新文件,并對(duì)新文件進(jìn)行打開(kāi)等操作,必須在CFile構(gòu)造函數(shù)或CFile:Open函數(shù)的第二個(gè)參數(shù)(文件打開(kāi)方式)中包含CFile:modeCreate標(biāo)志,該標(biāo)志與其他各標(biāo)志是位或(|)關(guān)系。例如:CFile file(MyFile.t

9、xt,CFile:modeRead|CFile:modeCreate ); 或CFile file;file.Open(MyFile.txt,CFile:modeWrite|CFile:modeCreate );VC+案例教程 北大出版社8.2.1.3 關(guān)閉文件當(dāng)文件操作完成后,必須關(guān)閉該文件。關(guān)閉一個(gè)已打開(kāi)的文件主要用Close函數(shù)。例如:CFile file;file.Open(MyFile.txt,CFile:modeWrite|CFile:modeCreate ); /文件其它操作file.Close(); / 關(guān)閉文件VC+案例教程 北大出版社8.2.1.4 讀寫(xiě)文件要在CFile類(lèi)

10、中,文件的讀寫(xiě)操作主要用Read函數(shù)和Write函數(shù)來(lái)完成。用Read函數(shù)所讀的文件必須以CFile:modeRead方式打開(kāi),用Write函數(shù)所寫(xiě)的文件必須以File:modeWrite方式打開(kāi)。VC+案例教程 北大出版社8.2.1.5 定位操作1Seek函數(shù) 2SeekToBegin函數(shù) 3SeekToEnd函數(shù) 4狀態(tài)函數(shù) 5靜態(tài)成員函數(shù) VC+案例教程 北大出版社8.2.2 案例8.2 使用CFile類(lèi)實(shí)現(xiàn)通訊錄 【例8.2】使用CFile類(lèi)來(lái)實(shí)現(xiàn)前面的通訊錄,我們首先將聯(lián)系人信息定義為一個(gè)結(jié)構(gòu)體類(lèi)型,然后通過(guò)對(duì)話框應(yīng)用程序來(lái)實(shí)現(xiàn)通訊錄文件的建立、讀寫(xiě)等操作。 VC+案例教程 北大出版

11、社8.2.2.l 應(yīng)用程序界面設(shè)計(jì) 創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,項(xiàng)目名為 AddressBook_File 。修改對(duì)話框的窗口標(biāo)題為“通訊錄(CFile類(lèi)實(shí)現(xiàn))”,將確定按鈕的標(biāo)題改為退出。采用列表控件來(lái)顯示數(shù)據(jù),窗口布局如圖8.4 所示。各控件屬性設(shè)置及連接變量參見(jiàn)表8-5。 VC+案例教程 北大出版社8.2.2.2 定義數(shù)據(jù)結(jié)構(gòu) 為了保存通訊錄中的數(shù)據(jù),必須定義相應(yīng)的數(shù)據(jù)結(jié)構(gòu)??梢詫⒙?lián)系人的數(shù)據(jù)信息定義為一個(gè)結(jié)構(gòu)體類(lèi)型,也可以將其定義為一個(gè)類(lèi)。在本例中,我們將其定義為一個(gè)結(jié)構(gòu)體類(lèi)型。typedef structchar Name20; / 姓名char Mobile20; / 電話char Birth20; / 生日char Email20; / E_Mail ADDRESSLIST; V

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論