VC++60 第十三章 保存和讀取文件

第十三章 保存和讀取文件

 

使用文件保存和讀取數據是經常需要的操作,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按紐就可以讀入並顯示在編輯框中。

 

VC++60 <wbr>第十三章 <wbr>保存和讀取文件

圖chap13-01

 

13.3 設計對話框的界面

 

按下圖和屬性表設計主窗口的界面:

VC++60 <wbr>第十三章 <wbr>保存和讀取文件
圖chap13-02

控件 標題 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 如何使它變成一個可儲存多行純文本的程序?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章