分享

文件映射mapviewoffile

 酒一壶 2010-03-17
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));

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多