CArchive 飞鸽传书 如何实现文件的序列号存取

飞鸽传书 如何实现文件的序列号存取,本文关于 CArchive 类对文件进行读写操作《序列化》,CArchive类是一种新的对文件的读定操作方式.它没有基类。

我们知道,一个对象一旦被构造,它就存活于内存中了,当其生命周期结束之后,该对象就要被销毁。那么该如何永久保存该对象呢,即在程序再次打开后,程序能够重新构建相应的对象,还原该对象以前的动作(当然首先这个对象类要有动态创建的功能)。

CArchive类就是可以将对象永久保存在磁盘中,它的这种功能叫做串行化或序列化。

CArchive类不仅可以处理基本类型的数据,还可以处理CObject类的派生类对象。它重载了<<(插入)和>>(提取)操作符。



CArchive类的使用方法:

1、创建一个CFile类或者其派生类对象,且该文件的操作方式(读,写)要与CArchive对象的操作方式一致.

2、此时再构建一个CArchive对象,并将其与CFile对象关联起来.

3、此时就可以对CArchive对象进行读写操作了,数据类型可以不一样。

4、当进行读取数据时,要保持和写入数据时的顺序一致.



例子:

//存文件

CFile file("file.txt",CFile::modeCreate|CFile::modeWrite); //写入文件

CArchive ar(&file,CArchive::store);  //关联文件,同时操作方式一致,都是存文件

int i=4;

char ch='a';

float f=1.3f;

CString str("dfasdaf");

ar<<i<<ch<<f<<str;   //将不同内容的数据写入文件file.txt中.



//读文件

CFile file("file.txt",CFile::modeRead); //读出文件内容

CArchive ar(&file,CArchive::load);  //关联文件,同时操作方式一致,都是读出文件内容

int m;

char l;

float fl;

CString str;

ar>>m>>l>>fl>>str;   //将不同内容的数据从文件file.txt中读取出来,但一定要保证读出与写入时数据类型

                     //的数据顺序要一致,要不然读出的数据就会不正确,例如将字符串内容放入整型变量时

                     //值是不一样的.

来源:CArchive 飞鸽传书 如何实现文件的序列号存取


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MFC中,可以使用CRecordset类来实现数据库的查询操作。多条件模糊查询可以通过SQL语句的LIKE关键字和通配符实现。以下是一个基于文件的多条件模糊查询示例: 1. 创建一个MFC应用程序,并添加一个对话框。 2. 在对话框中添加多个编辑框和一个列表框。 3. 在应用程序类的头文件中添加以下成员变量: ```cpp CString m_strName; CString m_strAddress; CString m_strPhone; ``` 4. 在OnInitDialog()函数中初始化编辑框和列表框的控件ID。 5. 在对话框的头文件中添加以下函数声明: ```cpp void DoQuery(); ``` 6. 在对话框的源文件实现DoQuery()函数: ```cpp void CMyDlg::DoQuery() { // 打开文件 CFile file(_T("data.txt"), CFile::modeRead); CArchive ar(&file, CArchive::load); // 读取数据 CString strLine; while (ar.ReadString(strLine)) { CString strName = strLine.SpanExcluding(_T(",")); CString strAddress = strLine.Mid(strName.GetLength() + 1).SpanExcluding(_T(",")); CString strPhone = strLine.Mid(strName.GetLength() + strAddress.GetLength() + 2); // 判断是否符合条件 if (strName.Find(m_strName) != -1 && strAddress.Find(m_strAddress) != -1 && strPhone.Find(m_strPhone) != -1) { // 添加到列表框 m_listBox.AddString(strName + _T(", ") + strAddress + _T(", ") + strPhone); } } // 关闭文件 ar.Close(); file.Close(); } ``` 7. 在对话框的源文件中添加OnBnClickedButtonQuery()函数,该函数将调用DoQuery()函数: ```cpp void CMyDlg::OnBnClickedButtonQuery() { // 获取编辑框内容 UpdateData(TRUE); // 清空列表框 m_listBox.ResetContent(); // 执行查询操作 DoQuery(); } ``` 8. 在对话框的源文件中添加OnBnClickedButtonExit()函数,该函数将关闭对话框: ```cpp void CMyDlg::OnBnClickedButtonExit() { // 关闭对话框 EndDialog(IDOK); } ``` 9. 在应用程序类的InitInstance()函数中创建对话框并显示: ```cpp CMyDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); ``` 10. 编译并运行程序,填写查询条件并点击“查询”按钮,列表框将显示符合条件的记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值