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. underscore.js框架使用

    Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程.MVC框架Backbone.js就将这个库作为自 ...

  2. 字符串(后缀自动机):COGS 2399. 循环同构

    这道题直接看代码吧. #include <iostream> #include <cstring> #include <cstdio> using namespac ...

  3. 【二分】NEERC15 L Landscape Improved(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一个宽度为N的网格图,i上有h[i]高的方块.现在你有W个方块,问怎么放使得最终的最高点最高. 只要一个格子的 ...

  4. SCU 4436 Easy Math 2015年四川省赛题

    题目链接:http://acm.scu.edu.cn/soj/problem/4436/ 题意:给你n个整数,求这n个数的平方根和是否是一个整数: 解题思路:如果这题每个数给他算出来,必然费时间,可能 ...

  5. ARM机器码分析

    我们编写的汇编程序还是不够底层,CPU都是对机器码进行操作的,所以还需要用汇编器将汇编代码转换成机器码才能被CPU处理.下面举几个例子来说说分析ARM机器码的方法. 对编译连接之后得到的ELF进行反汇 ...

  6. Ubuntu 14.04 dnw配置

    之前写的Ubuntu嵌入式环境搭建没有讲怎么配置dnw下载工具,使用dnw还得用红帽,今天配置好了ubuntu下的dnw,记录一下 首先先下载dnw的源码,这是我上传的提供给大家下载:http://p ...

  7. android EditText监听事件及参数详解

    editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence ...

  8. How to distribute your own Android library through jCenter and Maven Central from Android Studio

    In Android Studio, if you wish to include any library to your application. You could just simply add ...

  9. 关于Linux

    这是一个2B让我写的关于Linux的一点东西. 其实我对Linux一直都是持有一种很尊敬的态度,作为一个非商业性的操作系统,能够成长成这样简直是不可思议,有一种Dota在游戏界的感觉,很让人佩服.但是 ...

  10. C基本语句测试