文件与串行化

CArchive类:它没有基类,它允许你保存一个复杂的对象网络在一个永久的二进制形式上,通常是硬盘,在这个对象被删除之后保持持久性,以后可以从持久的保存器上加载这个对象,在内存中重新构建它们,使对象持久性的过程叫串行化;

串行化过程:将对象、数据写到磁盘,对象删除后,数据保存在磁盘,当下次再调用数据时,重新从磁盘中加载数据,并构建对象,使数据持久化,的这个过程.

可以认为它是一个输入输出的二进制流,就像输入输出流,一个Archive它与一个文件相关,允许带缓冲的写入数据到存储器上,或者带缓冲的从存储器上读取数据,一个输入输出流它处理ASCII字符序列,但是Archive它以一种有效率的非冗余的格式处理二进制对象数据

在你能够创建一个Archive对象之类,首先要创建一个CFile对象,另外你必须确认archive的下载、存储的状态和文件打开的方式相一致。你受限于每个文件一个活动的archive;

当你构建一个Carchive对象,将要将CFile类或都其派生类的对象关联到一起,表示一个打开的文件,你也可以指定这个archive是否用来加载和保存,一个Carchive对象它不仅仅可以处理基本类型,也可以处理Carchive派生类的对象.


重载的提取>>和插入<<操作符,它支持基本类型和派生类,是很方便的


CArchive::CArchive(

CFile *pFile,  //CFile对象

UINT nMode,//将被加载还是保存的一个标记,

int  nBufSize=4096,//指定内部文件BUFFER的大小,默认4096

void * lpBuf =NULL,//指向用户所指写的以Nsize为大小的Buffer, 如查没有指定,archive会从本地堆当中分配一个buffer,并且对象被销毁时释放这个buffer.但它并不会释放用户提供的buffer.

);

示例:

void CTestView::OnFileWrite() 
{
// TODO: Add your command handler code here
CFile file("1.txt",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=4;
char ch ='a';
float f=1.3f;
CString str("http://iscas.ac.cn");
ar<<i<<ch<<f<<str;
}


void CTestView::OnFileRead() 
{
// TODO: Add your command handler code here
CFile file("1.txt",CFile::modeRead);
CArchive ar(&file,CArchive::load);
int i;
char ch;
float f;
CString str;
CString strTemp;
ar>>i>>ch>>f>>str;
strTemp.Format("%d,%c,%f,%s",i,ch,f,str);
MessageBox(strTemp);

}

猜你喜欢

转载自blog.csdn.net/dyz_123456/article/details/71216285
今日推荐