您的位置:首页 > 编程语言

(转)mapViewOfFile内存文件读写

2011-12-28 10:05 375 查看
先打开文件 
然后用文件句柄打开文件映射句柄 
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));

//忘了出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息