(转)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));
//忘了出处
然后用文件句柄打开文件映射句柄
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));
//忘了出处
相关文章推荐
- [zz]内存映射文件,UnmapViewOfFile/MapViewOfFile(转载)
- 关于使用MAPVIEWOFFILE大文件的读写(DELPHI版)
- 用MapViewOfFile处理大文件-内存不足(转帖学习)
- 用MapViewOfFile处理大文件-内存不足
- 内存映射文件,UnmapViewOfFile/MapViewOfFile(转载)
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 共享内存对象方法(MapViewOfFile)
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- CreateFileMapping, MapViewOfFile 实现文件共享
- [转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- CreateFileMapping, MapViewOfFile 实现文件共享
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 使用文件映射的方式进行共享数据中CreateFileMapping、MapViewOfFile函数参数说明
- c++中共享内存操作函数MapViewOfFile解析(二)
- CreateFileMapping, MapViewOfFile 实现文件共享 (.net4.0 built-in)
- (转)CreateFileMapping/OpenFileMapping/MapViewOfFile
- MapViewOfView和UnmapViewOfFile
- XCode can't open file (ifstream/ofstream) in C++ (XCode C++无法读写文件)
- CreateFileMapping/OpenFileMapping/MapViewOfFile
- 使用ExeConfigurationFileMap读写配置文件