我是靠谱客的博主 火星上樱桃,最近开发中收集的这篇文章主要介绍MFC的序列化技术(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、函数中运用序列化向本地文件存储和下载数据
序列化函数,将数据转换成二进制流,存储到本地文件:
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的序列化技术(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部