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 如何使它变成一个可储存多行纯文本的程序?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值