複製鏈接
請複製以下鏈接發送給好友

CArchive

鎖定
CArchive 對象提供了一個類型安全緩衝機制,用於將可序列化對象寫入 CFile 對象或從中讀取可序列化對象。通常,CFile 對象表示磁盤文件;但是,它也可以是表示“剪貼板”的內存文件(CSharedFile 對象)。
中文名
CArchive
提    供
類型安全緩衝機制
表    示
剪貼板”的內存文件

CArchive名詞解釋

CArchive侷限性

給定的 CArchive 對象要麼存儲數據(即寫入數據或將數據序列化),要麼加載數據(即讀取數據或將數據反序列化),但決不能同時進行。CArchive 對象的壽命只限於將對象寫入文件或從文件讀取對象的一次傳遞。因此,需要兩個連續創建的 CArchive 對象將數據序列化到文件,然後從文件反序列化數據。

CArchiveCR

當存檔將對象存儲到文件時,存檔將 CRuntimeClass 名稱附加到這些對象。然後,當另一個存檔將對象從文件加載到內存時,將基於這些對象的 CRuntimeClass 動態地重新構造 CObject 派生的對象。通過存儲存檔將給定對象寫入文件時,該對象可能被引用多次。然而,加載存檔將僅對該對象重新構造一次。有關存檔如何將 CRuntimeClass 信息附加到對象以及重新構造對象(考慮可能的多次引用)的詳細信息。
將數據序列化到存檔時,存檔積累數據,直到其緩衝區被填滿為止。然後,存檔將其緩衝區寫入 CArchive 對象指向的 CFile 對象。同樣,當您從存檔中讀取數據時,存檔會將數據從文件讀取到它的緩衝區,然後從緩衝區讀取到反序列化的對象。這種緩衝減少了物理讀取硬盤的次數,從而提高了應用程序的性能。
CArchive使用緩衝區作為臨時數據存儲地,讀寫都先依次排列到此緩衝區,當緩衝區滿或用户要求時,將此段整理後的數據讀寫到指定的存儲介質。 好比火車貨場裝運零散的貨物被收集,當總量到達火車運量的時候,由火車裝運走。

CArchiveCA 詳解

CArchiveCA沒有基類

CArchive允許以一個永久二進制(通常為磁盤存儲)的形式保存一個對象的複雜網絡,它可以在對象被刪除時,還能永久保存。可以從永久存儲中裝載對象,在內存中重新構造它們。使得數據永久保留的過程就叫作“串行化”。
可以把一個歸檔對象看作一種二進制流。像輸入/輸出流一樣,歸檔與文件有關並允許寫緩衝區以及從硬盤讀出或讀入數據。輸入/輸出流處理一系列ASCII字符,但是歸檔文件以一種有效率、精練的格式處理二進制對象。
必須在創建一個CArchive對象之前,創建一個CFile對象。另外,必須確信歸檔文件的裝入/存儲與文件的打開模式是兼容的。每一個文件只限於一個活動歸檔文件。
當構造一個CArchive對象時,要把它附加給表示一個打開文件的類CFile(或派生類)的對象上。還要指定歸檔文件將用於裝載還是存儲。CArchive對象不僅可以處理首要類型,而且還能處理為串行化而設計的CObject_派生類的對象。一個串行化類通常有一個Serialize成員函數並且使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。這些在CObject類中有所描述。
重載提取(>>)和插入(<<)是方便的歸檔編程接口。它支持主要類型和CObject派生類。
CArchive還支持使用MFC Windows套接字CSocketCSocketFile編程。IsBufferEmpty成員函數也支持這種使用。如果要了解有關CArchive的更多信息,請參閲聯機文檔“Visual C++ 程序員指南”中的“串行化(永久對象)” 和“Windows套接字:在歸檔文件中使用套接字”
include<afx.h>
請參閲 CFile,CObject,CSocket,CSocketFile

CArchiveCA成員

數據成員
m_pDocument 指向被串行化CDocument對象
CArchive 創建一個CArhcive對象
Abort在不異常的情況下,關閉歸檔文件
Close沖掉未寫入數據並且釋放與CFile的連接
基礎輸入/輸出
Flush從歸檔文件緩衝區中沖掉未寫入數據
運算符>>裝載對象和歸檔文件的主要類型
運算符<<存儲對象和歸檔文件的主要類型
Read讀入原始類型
Write寫入原始類型
WriteString寫一行文本
ReadString讀一行文本
狀態
GetFile獲得此歸檔文件的
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對象,則在關閉文件之後,必須刪除它。
請參閲
CArchive::Close,
CFile::Close
CArchive::CArchive
CArchive(CFile*pFile,UINTnMode,int nBufSize=4096,void*lpBuf=NULL );

CArchive參數

pFile
CFile對象的指針CFile對象是永久數據的最終的源或目標。
nMode標識
它指定了對象是否從歸檔文件中裝載或存儲到文件中去。
nMode參數必須有下列值之一:
l CArchive::load 從歸檔文件裝載數據。CFile只讀。
l CArchive::store 把數據保存到歸檔文件中。允許CFile寫操作。
l CArchive::bNoFlushOnDelete 當歸檔文件析構程序被調用時,防止歸檔文件自動調用Flush。如果設定了此標識,則在析構程序被調用之前必須負責調用Close函數。如果不這樣做,數據就會崩潰。
nBufSize
指定內部文件緩衝區大小的整數,以字節計算。注意缺省的緩衝區大小為4096字節。如果例程歸檔大的對象,使用大一些的緩衝區,即多個文件緩衝區,那麼將會提高例程的執行效率。
lpBuf
指向nBufSize大小的提供緩衝區的指針。如果不指定這個參數,歸檔文 件從本地堆為歸檔文件分配一個緩衝區並且當對象被譭棄時,釋放緩衝 區。歸檔文件不能釋放一個提供的緩衝區。
説明
構造CArchive對象並且指定它將用於裝載或存儲對象。在創建歸檔文件之後,不能改變這個指定內容。不能使用CFile操作來改變文件的狀態直到已經關閉歸檔文件時。任何這樣的操作都將會譭棄歸檔文件的完整性。通過由GetFile成員函數獲得歸檔文件的文件對象使得可在串行化過程中的任何時候訪問文件指針的位置。然後使用CFile::GetPosition函數。應該在獲得文件指針位置之前,調用CArchive::Flush。
示例
extern char* pFileName
CFile f;
char buf[512];
if(!f.Open( pFileName,CFile::modeCreate| CFile::modeWrite)){
#ifdef_DEBUG
afxDump<< “unable to open file”<<”\n”;
exit(1);
}
CArchive ar( &f, CAchive::strore,512,buf);
請參閲 CArchive::Close,
CArchive::Flush,
CFile::Close
CArchive::Close
void Close( )
説明
沖掉保存在緩衝區中的任何數據,關閉歸檔文件並且釋放歸檔文件與文件的鏈接。對於歸檔文件沒有允許的其它操作。在關閉一個歸檔文件之後,可以為一個同樣文件創建另一個歸檔文件或者關閉文件。成員函數Close保證所有數據從歸檔文件傳輸到文件並且使歸檔文件無效。為了完成從文件到存儲介質的傳輸,必須首先使用CFile::Close並且再譭棄CFile對象。
請參閲 CArchive::Flush,
CArchive::Abort
CArchive::Flush
void Flush( );
throw( CFileException);
説明
迫使保留在歸檔文件中的數據寫入文件。成員函數Flush保證所有的數據從歸檔文件傳輸到文件。必須調用CFile::Close來完成從文件到存儲介質的 [1] 
參考資料