第十三章 保存和讀取文件
使用文件保存和讀取數據是經常需要的操作,VC++有一個CFile類來管理和使用文件。另外,還有一個類CArchive,中文翻譯爲系列化保存和讀取文件或串行化,它用於儲存一系列用序的數據。本書把它稱爲“系列化”吧,本章通過一個實例演示保存和讀取文件的最基本的方法。
本章要點
1 CFile類和打開文件的
2 使用系列化存取文件類CArchive
13.1 CFile類和CArchive類
CFile類屬於MFC的基本類,它是管理和使用文件的類,功能非常強大。我們將在後續的教程中專門討論,本章只學習打開和關閉文件的方法。
CFile f;
f.Open(路徑名, 打開方式);
第一行聲明一個文件對象f,第二行是打開文件。該函數有兩個參數,參數1是字符串類型,指定要打開的文件路徑名。參數2表示打開方式,它必須是CFile的數據成員。例如:
f.Open("mytest.txt", CFile::modeCreate|CFile::modeWrite);
語句指明打開模式爲新建,如果文件已經存在,則以“寫模式”打開,即新內容將從頭寫起,覆蓋舊的內容。而文件名則是當前目錄中的mytest.txt。這樣打開的文件是不能讀 的,如果要讀,舊要用“讀模式”去打開,:如
f.Open("mytest.txt", CFile::modeRead);
這兩個函數都有一個bool返回值,如果操作成功就返回真TURE,FALSE就表示打開失敗。
要儲存文件可建立一個系列化對象,如:
CArchive ar(&f, CArchive::store);
ar << m_var1 << m_var2 ;
用CArchive類的構造函數創建了ar對象,這需要帝國兩個參數,一個可以存取的CFile對象,&f就是該文件對象的地址;另一個是CArchive類的數據,指定是用存模式store還是取模式load。第二個語句中的“<<”是輸出操作符,它將變量的值輸出到ar中。所以上面的兩句功能是聲明對象ar爲存模式,把變量m_var1和m_var2依次寫入文件f中。
如果要從文件中讀取數據,就可用如下代碼:
f.Open("mytest.txt", CFile::modeRead);
CArchive ar(&f, CArchive::load);
13.2 ArchiveFile.exe程序的界面和功能
現在我們來創建一個ArchiveFile程序,在對話框中輸入姓名和年齡,年齡是整數類型。按SAVE按紐數據就保存在指定的一個文件中。如果儲存過的話,按OPEN按紐就可以讀入並顯示在編輯框中。
圖chap13-01
13.3 設計對話框的界面
按下圖和屬性表設計主窗口的界面:
控件 | 標題 | ID | 屬性 |
編輯框 | - | IDC_VAR1_EDIT | |
編輯框 | - | IDC_VAR2_EDIT | Styles = Number |
按紐 | SAVE | IDC_SAVE_BUTTON | |
按紐 | OPEN | IDC_OPEN_BUTTON | |
按紐 | EXIT | IDC_EXIT_BUTTON |
13.4 編寫代碼
先給兩個編輯框定義兩個變量CString m_var1和int m_var2。剩下的就只要給三個按紐下代碼。雙擊SAVE按紐,鍵入下列代碼:
void CArchiveFileDlg::OnSaveButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CFile f;
f.Open("mytest.txt", CFile::modeCreate|CFile::modeWrite);
CArchive ar(&f, CArchive::store);
ar << m_var1 << m_var2 ;
ar.Close();
f.Close();
m_var1 = "";
m_var2 = 0 ;
UpdateData(!TRUE);
MessageBox("文件mytest.txt已經存好");
}
雙擊Open按紐,鍵入下列代碼:
void CArchiveFileDlg::OnOpenButton()
{
// TODO: Add your control notification handler code here
CFile f;
if(f.Open("mytest.txt", CFile::modeRead) == FALSE)
return;
CArchive ar(&f, CArchive::load);
ar >> m_var1 >> m_var2 ;
ar.Close();
f.Close();
UpdateData(!TRUE);
}
文件使用完畢後要用Close()關閉它。雙擊EXIT按紐,鍵入OK代碼。就可以編譯和運行了。
思考和實踐
1 把本程序擴展成一個可記錄員工信息登記表的程序。
2 在兩輸入框這都輸入數字,保存後有記事本打開文件,看看記錄有何差異。
3 如何使它變成一個可儲存多行純文本的程序?