映射文件把虚拟可寻址空间映射到文件上整个文件就可以很容易访问就像它在内存中样但是它实质还是在硬盘中只是需要时候载入需要部分到内存这样可以节约物理内存使用windows 使用 这个来加载EXE和DLL所以这个因该是高效windows下默认虚拟内存页最小是512KB所以对512KB以下文件使用就是多余低效
按照以下步骤使用
1. CreateFile打开您想要映射文件
2. CreateFileMapping其中要求传入先前CreateFile返回句柄该生成个建立在CreateFile创建文件对象基础上内存映射对象
3. MapViewOfFile映射整个文件个区域或者整个文件到内存该返回指向映射到内存第个字节指针
4. 用该指针来读写文件
5. UnmapViewOfFile来解除文件映射
6. CloseHandle来关闭内存映射文件注意必须传入内存映射文件句柄
7. CloseHandle来关闭文件注意必须传入由CreateFile创建文件句柄
/////////////////////////////////////////////
//为了简单 省略检查
//建个test.txt文本文件做实验
//这里只演示读取操作
//win32 console
//winXP+vc6
//write by DKink|棼紫
//2007.10.09
# \"stdafx.h\"
# <tchar.h>
# <windows.h>
( argc, char* argv)
{
TCHAR *fileName =_T(\"test.txt\");
//--------------------------------------
//打开文件
HANDLE fileHandle = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,//文件必须存在
0,
NULL);
//--------------------------------------
//从文件创建映射对象
HANDLE fileMapping = CreateFileMapping(
fileHandle,
NULL,
PAGE_READONLY,
0,
0,
NULL);
//---------------------------------------
//把文件映射到指针(为什么用char这个大小是个Byte)
char *fileBase = (char *) MapViewOfFile(
fileMapping,
FILE_MAP_READ,
0,
0,
0);
//--------------------------------------- [Page]
//使用数据
MessageBox(NULL,fileBase,\"MTest\",MB_OK);//这句可能有溢出正常情况误用
UnmapViewOfFile(fileBase);//解除文件映射
CloseHandle(fileMapping);//关闭内存映射文件
CloseHandle(fileHandle);//关闭文件
0;
}
最新评论