CArchive允许以一个二进制的形式保存一个对象的复杂网络,也可以再次装载它们,在内存中重新构造,这一过程叫作串行化/序列化(Serialization),简单的说,CArchive与CFile配合使用可以以二进制读取/保存数据到文件。

创建一个CArchive对象之前,你必须创建并成功打开一个CFile对象。另外,必须确信归档文件的装入(load)/存储(store)与文件的打开模式是兼容的,每一个文件只限于一个活动归档文件。

CArchive 对象的寿命只限于将对象写入文件或从文件读取对象的一次传递,也就是说,即使你使用了读写模式打开CFile对象,你也只能在load(store)结束并Close了CArchive对象后,才能重新对同一个CFile对象使用CArchive对象进行store(load)。

主要类型和CObject派生类都能支持CArchive进行读写,很多时候也需要重载CObject中的Serialize函数,蓝色部分为需要使用 <<  >> 时才需要做的步骤:

1. 继承CObject类

2. 重载CObject类的Serialize()成员函数

3. 在类的头文件中用Serialize的宏声明:DECLARE_SERIAL(CMyClass)

4. 定义默认(无参数)的构造函数

5. 在类文件中使用实现Serialize宏声明:IMPLEMENT_SERIAL(CMyClass, CObject, 1 /*版本号*/)

CArchive基本用法,其中 m_NetList 为一CListCtrl对象,在这里并没有重载Serialize:

存:

CString szFileName = _T("c:\\1.dat");
CFile file;
if (file.Open(szFileName, CFile::modeCreate | CFile::modeWrite)) { CArchive ar(&file, CArchive::store);
int nCount; nCount = m_NetList.GetItemCount(); ar << nCount;
for (int nID = 0; nID < nCount; nID++) { ar << m_NetList.GetItemText(nID, 1);
ar << m_NetList.GetItemText(nID, 2);
ar << m_NetList.GetItemText(nID, 6);
} ar.Close();
}
file.Close();

取:

CString szFileName = _T("c:\\1.dat");
CFile file;
if (file.Open(szFileName , CFile::modeRead)) { CArchive ar(&file, CArchive::load); int nCount, nID;
CString tempS; m_NetList.DeleteAllItems(); ar >> nCount;
for (int i = 0; i < nCount; i++) { nID = m_NetList.InsertItem(i, _T("")); ar >> tempS;
m_NetList.SetItemText(nID, 1, tempS);
ar >> tempS;
m_NetList.SetItemText(nID, 2, tempS);
ar >> tempS;
m_NetList.SetItemText(nID, 6, tempS);
} ar.Close();
}
}
file.Close();

  

将对象保存至文件——CArchive的更多相关文章

  1. Python强化训练笔记(七)——使用deque队列以及将对象保存为文件

    collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...

  2. C# 将对象保存为文件 读取文件并转为对象 压缩文件 解压缩文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. .Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径

    前言: 首先对于图片上传而言,在我们的项目开发中可以说出现的频率是相当的高的.这篇文章中,我将要描述的是在我们.Net中如何使用Jquery Ajax通过FormData对象异步提交图片文件到后台保存 ...

  4. C#对象与XMl文件之间的相互转换

    C#提供三种序列化方式,分别为: 1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于Binar ...

  5. Java序列化 如何把多个对象存储在一个文件中

    /** * 用于保存模板文件,内容包括: * 1,标志位,1 int * 2,版本   1 int * 3,数据头长度 1 int * 4,预留数据头空间  5120 byte * 5,后续数据长度  ...

  6. IT轮子系列(四)——使用Jquery+formdata对象 上传 文件

    前言 在MVC 中文件的上传,一般都采用控件: <h2>IT轮子四——文件上传</h2> <div> <input type="file" ...

  7. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

  8. C#对象与XMl文件之间的相互转换(转)

    本文是对C#中对象与XMl文件之间的相互转换进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 C#提供三种序列化方式,分别为:1.是使用BinaryFormatter进行串行化: 2.使 ...

  9. C#.Net 持久化对象为XML文件

    </pre><pre code_snippet_id="613717" snippet_file_name="blog_20150307_1_57950 ...

随机推荐

  1. Lua I/0输入输出

    I/O库为文件操作提供了两种不同的模型,简单模型和完整模型.简单模型假设一个当前输入文件和一个当前输出文件,他的I/O操作均作用于这些文件.完整模型则使用显式的文件句柄,并将所有的操作定义为文件句柄上 ...

  2. 【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间

    原文网址:http://bbs.eeworld.com.cn/thread-438571-1-1.html /*                         * 通过使用if(gatt==null ...

  3. wpa_cli与wpa_supplicant的交互命令

    1)通过adb命令行,可以直接打开supplicant,从而运行wpa_cli,可以解决客户没有显示屏而无法操作WIFI的问题,还可以避免UI的问题带到driver.进一步来说,可以用在很多没有键盘输 ...

  4. HDOJ 1215 七夕节

    Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...

  5. UVAlive3126 Taxi Cab Scheme(DAG的最小路径覆盖)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32568 [思路] DAG的最小路径覆盖. 将每个人看做一个结点,如 ...

  6. SRM 403(1-250pt, 1-500pt)

    DIV1 250pt 题意:称各个数位只含有4和7的数为lucky number,给定a,b,求[a, b]中的lucky number有多少个.a, b <= 10^9 解法:很明显的数位dp ...

  7. 九度online judge 1543 二叉树

    题目1543:无限完全二叉树的层次遍历 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:389 解决:54 题目描述: 有一棵无限完全二叉树,他的根节点是1/1,且任意一个节点p/q的左儿 ...

  8. spring mvc mybatis

    Spring与Mybatis整合需要引入一个mybatis-spring.jar包,该整合包有Mybatis提供,可以从Mybatis官网下载. 该jar包提供了几个API: 1.SqlSession ...

  9. 初次了解CSS3

    什么是CSS,什么是CSS3? 非常简单,CSS代表"Casading Style Sheets",就是样式表,是一种替代并为网站添加样式的标记性语言.现在所使用的CSS基本是在1 ...

  10. QQ群成员提取

    var ids = document.querySelectorAll(".member_id"); var names = document.querySelectorAll(& ...