本文主要是介绍CArchive和Serialize即通过串行化文档的写入与读取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CArchive和Serialize即通过串行化文档的写入与读取标签: 杂谈
之所以要这样通过串行化(CArchive和Serialize)的方式进行文件读去而不用CFile的方式进行文件的读取是因为串行化方式除了可以使用文件保存对象之外,还可以通过网络,串口,传输对象!!
例如这里使用打开键打开一个格式为txt的文件,并将文件内容显示在当前的View里面:
void CTextView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog mydlg(TRUE,"TXT");
mydlg.DoModal();
filename=mydlg.GetPathName();
CFile myfile;
myfile.Open(filename,CFile::modeRead);
CArchive ar(&myfile,CArchive::load); //定义一个文档类便于输出到视图
// SerializeRaw(ar); //CEditView类里面的SerializeRaw方法,它只能实现txt文件的读取与储存
//或者用Serialize(ar); 的方式进行处理如下:
CBmpTextDoc*pDoc=(CBmpTextDoc*)GetDocument(); //!!!!!进入文档类,以便使用里面的Serialize函数进行串行化读取操作
pDoc->Serialize(ar);//自动将文件里面的内容全部读取完!!!!!!!!!!!!!!!!!!!!!!!
如果要用文件读取的方式读取,那么应该这样
while(文件不到尾部) 其中不到文件尾部与EOF有关
{
myfile。reading··········大概是这样子的,反正就是这个意思
}
CString strs;
strs=pDoc->str; //str是本身pDoc里面自带就有的变量
CEdit& theEdit = GetEditCtrl(); // CView是CEdit的派生,所以有它的功能
theEdit.SetSel(0,-1);
theEdit.ReplaceSel (strs);
pDoc->UpdateAllViews(NULL);
ar.Close();
myfile.Close();
pDoc->SetTitle(filename);
}
总结:首先CArchive ar(使用文件对话框打开的文件,CArchive::load);
接着再pDoc->Serialize(ar);注意pDoc用GetDocument()的方式定义!···
即在pDoc里面就有“使用文件对话框打开的文件”里面的信息咯!```
这篇关于CArchive和Serialize即通过串行化文档的写入与读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!