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;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章