Windows——CArchive类

简介: Windows——CArchive类

CArchive


CArchive 对象提供了一个类型安全缓冲机制,用于将可序列化对象写入 CFile 对象或从中读取可序列化对象。通常,CFile 对象表示磁盘文件;但是,它也可以是表示“剪贴板”的内存文件(CSharedFile 对象)。


CArchive 详解


CArchive没有基类


CArchive允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。


可以把一个归档对象看作一种二进制流。像输入/输出流一样,归档与文件有关并允许写缓冲区以及从硬盘读出或读入数据。输入/输出流处理一系列ASCII字符,但是归档文件以一种有效率、精练的格式处理二进制对象。


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


当构造一个CArchive对象时,要把它附加给表示一个打开文件的类CFile(或派生类)的对象上。还要指定归档文件将用于装载还是存储。CArchive对象不仅可以处理首要类型,而且还能处理为串行化而设计的CObject_派生类的对象。一个串行化类通常有一个Serialize成员函数并且使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。这些在CObject类中有所描述。


重载提取(>>)和插入(<<)是方便的归档编程接口。它支持主要类型和CObject派生类。


CArchive还支持使用MFC Windows套接字类CSocket和CSocketFile编程。

IsBufferEmpty成员函数也支持这种使用。如果要了解有关CArchive的更多信息,请参阅联机文档“Visual C++ 程序员指南”中的“串行化(永久对象)” 和“Windows套接字:在归档文件中使用套接字”


include<afx.h>


请参阅 CFile,CObject,CSocket,CSocketFile


CArchive类的成员


数据成员


m_pDocument 指向被串行化的CDocument对象


构造函数


CArchive 创建一个CArhcive对象


Abort在不异常的情况下,关闭归档文件


Close冲掉未写入数据并且释放与CFile的连接


基础输入/输出


Flush从归档文件缓冲区中冲掉未写入数据


运算符>>装载对象和归档文件的主要类型


运算符<<存储对象和归档文件的主要类型


Read读入原始类型


Write写入原始类型


WriteString写一行文本


ReadString读一行文本


void CMessaage::Serialize(CArchive& ar)
{
  // storing 储存
  if (ar.IsStoring())
  { // storing code
    ar << m_nType;
    ar << m_strFileName;
    ar << m_dwFileSize;
  }
  else
  { 
    // loading code
    ar << m_nType;
    ar << m_strFileName;
    ar << m_dwFileSize;
  }
}


状态


GetFile获得此归档文件的


CFile对象指针


GetObjectSchema由Serialize函数调用来确定被非串行化的对象的版本

SetObjectSchema在归档文件中存储对象概要


IsLoading确定归档文件是否被装载


IsStoring确定归档文件是否被存储


IsBufferEmpty确定在一个Windows Socket接收过程中缓冲区是否被清空

对象输入/输出


ReadObject调用一个用于装载的Serialize函数


WriteOjbect调用一个用于装载的Serialize函数


MapObject在没有对文件串行化的映射中放置对象,但是此映射对参考的子对象有效

SetStoreParams设置哈希表的大小和映射的块的大小,在串行化的过程中识别唯一的对象


LoadParams设置装载数组扩展的大小。必须在被装载对象之前或调用MapObject或ReadObject之前


ReadClass读入一个原先存储在WriteClass中的类的参考


WriteClass把对CRuntime的参考写入CArchive


SerializeClass根据CArchive方向,读入或写入对CArchive对象的类的参考


成员函数


CArchive::Abort


void Abort( );


说明


调用此函数在不异常的情况下关闭归档文件。CArchive析构程序将调用Close,它将冲掉任何没有被存储在相关CFile对象中的数据。这会引起异常。


当获取这些异常时,有一个好的方法就是使用Abort,这样析构CArchive对象就不会再引起异常。当处理异常时,在失败时CArchive::Abort将不会异常,因为与CArchive::Clsoe不同,Abort忽略失败。


如果使用new在堆上分配CArchive对象,则在关闭文件之后,必须删除它。


参考代码:

if (m_pArchiveOut != NULL)
  {
    m_pArchiveOut->Abort();
    delete m_pArchiveOut;
    m_pArchiveOut = NULL;
  }
相关文章
|
10月前
|
存储 程序员 编译器
windows下的串口编程,串口操作类封装
windows下的串口编程,串口操作类封装
|
11月前
|
C++ Windows
C++ Windows窗口程序:子窗口控件之按钮类button
C++ Windows窗口程序:子窗口控件之按钮类button
550 0
|
Java Linux iOS开发
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
117 0
|
JavaScript API Windows
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
231 0
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
|
网络协议 Windows
Windows套接字CAsyncSocket类的使用
Windows套接字CAsyncSocket类的使用
140 0
|
Java Linux iOS开发
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
225 0
|
SQL 缓存 数据库连接
艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写
本系列文章导航 基于.NET平台的Windows编程实战(一)——前言 基于.NET平台的Windows编程实战(二)—— 需求分析与数据库设计 基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写 基于.NET平台的Windows编程实战(五)—— 问卷管理功能的实现 基于.NET平台的Windows编程实战(六)—— 题目管理功能的实现 大家都知道本系统的正常运行少不了数据库操作这一块,且其在本系统中具有决定性作用,可以说没有它的操作系统将无法运行,故在本节课程中,专门把针对数据库的操作类拿出来讲讲,以便大家更加容易理解后面的课程。
968 0
|
Windows Swift
在windows上操练swift语言:类和结构体
条件所限,只能在WINDOWS上学习SWIFT的基本语法。 还有,有swift for windows 1.9帮忙, 看书没那么燥。。。。
2623 0