内存映射文件

内存映射文件在读写文件方面提供了一种完全不同的方法。采用标准文件IO函数将文件以流的形式读入。要访问一个文件不同部分的字节数据,必须将文件指针移至第一个字节处,读入数据,移动文件指针,再读入数据。

当你对内存映射文件进行读写操作时,这些改动将会反映在你从同一缓冲区中所读回的数据上。当你关闭了内存映射文件时,系统将改动过的数据写回到原始文件中。如果你想让数据在关闭文件前就歇会文件的话,可以使用下面的函数:FlushViewofFile()。

当你不再使用内存映射文件时,必须做一点清理工作。首先必须调用UnmapViewOfFile来解除视图与文件映射对象的关系。其次,必须调用函数来关闭映射对象以及文件本身,两者的关闭都是通过调用CloseHandle来完成的。首先是关闭内存映射对象,然后再关闭文件。

下面的代码演示了完整的打开文件、创建映射对象和映射视图,以及清理工作的全过程。

WinCE6以及以后的版本中,要以内存映射的访问方式打开一个文件,必须先调用CreateFile来打开它,就像标准的流访问方式一样。在WinCE5.0以及以前的版本中,必须用WinCE中独特的CreateFileForMapping()来打开文件。

HANDLE hFile,hFileMap;

PBYTE pFileMem;

TCHAR szFileName[MAX_PATH];

hFile = CreateFile(szFileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS,0);

if(hFile!=INVALID_HANDLE_VALUE)

{

pFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0);

if(hFileMap)

{

pFileMem = (PBYTE)MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0);

if(pFileMem)

{

// use data of the file

//Start cleanup by unmapping view.

UnmapViewOfFile(pFileMem);

}

CloseHandle(hFileMap);

}

CloseHandle(hFile);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值