mapViewOfFile内存文件读写
2008-05-05 17:51
先打开文件
然后用文件句柄打开文件映射句柄 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 *pClass=(CMyClass *)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)); |
|