概述
一、函数中运用序列化向本地文件存储和下载数据
序列化函数,将数据转换成二进制流,存储到本地文件:
void save()
{
CFile file("d:\1.dat",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=12;
float f=3.1415;
ar<<i<<f;
ar.Close();
file.Close();
}
首先,构造CFile对象file,其构造函数包含两个参数,第一个参数表示存储文件的路径,第二个个参数表示
打开的模式,是写入还是读取,如果没有该文件是不是需要先创建等等。
然后构造CArchive类的对象ar,其构造函数第一个参数是刚才构造的CFile对象file的指针,第二个参数是打
的模式,是存储(序列化),还是下载(反序列化)。
最后将变量i、f的值分别序列化到文件"d:\1.dat"中,关闭ar和file。
反序列化函数,将本地文件的二进制数据流转换成对应的数据:
void load()
{
CFile file("d:/1.dat",CFile::modeRead);
CArchive ar(&file,CArchive::load);
int i;
float f;
ar>>i>>f;
printf("i=%d,f=%lfn",i,f);
ar.Close();
file.Close();
}
首先,还是构造CFile类的对象file,关联本地的存储文件"d:/1.dat",模式选择CFile::modeRead读取模式。
然后,构造CArchive对象,绑定刚才构造的CFile类对象file,模式选择下载模式。
最后声明两个变量i和f,利用CArchive对象ar将本地文件中的二进制数据流反序列化到这两个变量中,打印
这两个变量,并关闭ar和file。
源代码:
#include "stdafx.h"
#include "afxwin.h"
void save()
{
CFile file("d:\1.dat",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=12;
float f=3.1415;
ar<<i<<f;
ar.Close();
file.Close();
}
void load()
{
CFile file("d:/1.dat",CFile::modeRead);
CArchive ar(&file,CArchive::load);
int i;
float f;
ar>>i>>f;
printf("i=%d,f=%lfn",i,f);
ar.Close();
file.Close();
}
int _tmain(int argc, _TCHAR* argv[])
{
save();
load();
system("pause");
return 0;
}
二、函数中运用序列化向内存中存储和下载数据
源代码如下:
#include "stdafx.h"
#include "afxwin.h"
void save(CMemFile* pFile)
{
CArchive ar(pFile,CArchive::store);
int i=10;
float f=3.14;
ar<<i<<f;
ar.Close();
}
void load(CMemFile* pFile)
{
CArchive ar(pFile,CArchive::load);
int i;
float f;
pFile->Seek(CFile::begin,0);
ar>>i>>f;
printf("i=%d,f=%lfn",i,f);
ar.Close();
}
int _tmain(int argc, _TCHAR* argv[])
{
BYTE* pBuf=new BYTE[1024];
CMemFile File(pBuf,1024,0);
save(&File);
load(&File);
File.Close();
delete[] pBuf;
pBuf=NULL;
system("pause");
return 0;
}
在main函数中,new了一块大小为1024个BYTE的内存,然后构造CMemFile对象File,该对象的构造函数有三个
参数,第一个为内存的指针;第二个参数为构造的CMemFile对象的大小,单位为字节;第三个参数,表示构造的
CMemFile对象大小不够时,内存增长的步长,即每次增加多少个字节。
在save(CMemFile* pFile)函数中,参数为CMemFile对象的指针,其数据的序列化和存储到本地文件的形式类
似,先构造CArchive对象,然后直接序列化数据。
在void load(CMemFile* pFile)中,要特别说明下,数据反序列化前,我们需要将此时的文件指针由末尾处移
到文件开头:pFile->Seek(CFile::begin,0);,然后才能进行数据的反序列化。
最后记得关闭文件File.Close();以及释放共享内存delete[] pBuf;
最后
以上就是火星上樱桃为你收集整理的MFC的序列化技术(一)的全部内容,希望文章能够帮你解决MFC的序列化技术(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复