(转)mapViewOfFile内存文件读写

先打开文件 
然后用文件句柄打开文件映射句柄 
CreateFileMapping() 

然后 
MapViewOfFile() 
把文件影射到内存 

这样你就可以像操作一个类一样操作文件了 
具体参考MSDN 这两个函数都太复杂了 
我说不明白 
我就举例子怎么用吧 
CFile file; 
file.Open("File",CFile::modeRead|CFile::modeWrite); 
SECURITY_ATTRIBUTES sa; 
sa.nLength=sizeof(sa); 
sa.lpSecurityDescriptor=NULL; 
sa.bInheritHandle=FALSE; 
HANDLE hFileMapping=CreateFileMapping(file.m_hFile,&sa,PAGE_READWRITE,NULL,NULL,NULL); 
LPVOID pmem=MapViewOfFile(hFileMapping,FILE_MAP_WRITE,0,0,0); 
CMyClass *p *)pmem; 
//....然后你就操作吧 
这里涉及到很多句柄,建议关闭顺序 
1.UnmapViewOfFile(pmem) 
2.CloseHandle(m_hFileMapping) 
3.file.Close(); 
特别说明,如果你仅仅使用file.Close() 
我很遗憾的告诉你,你的文件会返回关闭成功,但是仍然保留在内存里。 
推荐参考书籍:windows核心编程 

哦对了,补充一下,刚刚问题没看明白 
如果你的类大小是固定的,并且你想访问第N个类,你可以这么写 

CMyClass *pClass=(CMyClass *)MapViewOfFile(hFileMapping,FILE_MAP_WRITE,0,sizeof(CMyClass)*N,sizeof(CMyClass));


//忘了出处

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值