1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
HANDLE hFile; //文件句柄 HANDLE hMapping; //文件映射句柄 LPVOID lpHeadBase; //创建映射的头指针 DWORD dwFileSize; //文件大小 DWORD dwBufferRead; //实际读取字节 //打开文件 hFile=CreateFile("C:\\windows\\system32\\notepad.exe",GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile==INVALID_HANDLE_VALUE) { MessageBox("打开文件失败!","错误提示",MB_OK); return; } //获取文件大小 dwFileSize=GetFileSize(hFile,NULL); //创建文件映射 hMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); if (hMapping==NULL) { MessageBox("创建文件映射失败!","错误提示",MB_OK); CloseHandle(hFile); //关闭创建的文件句柄 return; } //将文件映射对象映射到当前应用程序的地址空间中 lpHeadBase=MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0); if (lpHeadBase==NULL) { MessageBox("文件映射地址失败!","错误提示",MB_OK); CloseHandle(hMapping); //关闭映射句柄 CloseHandle(hFile); //关闭文件句柄 return; } //打开新的文件 hFile=CreateFile("C:\\notepad.exe",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile==INVALID_HANDLE_VALUE) { MessageBox("生成文件失败!","错误提示!",MB_OK); return; } //写入文件 if (!WriteFile(hFile,lpHeadBase,dwFileSize,&dwBufferRead,NULL)) { MessageBox("写入文件失败!","错误提示!",MB_OK); //卸载文件映射,关闭文件句柄 UnmapViewOfFile(lpHeadBase); CloseHandle(hMapping); CloseHandle(hFile); return; } //卸载文件映射,关闭文件句柄 UnmapViewOfFile(lpHeadBase); CloseHandle(hMapping); CloseHandle(hFile); MessageBox("创建文件成功!","成功提示",MB_OK); |
转载请注明:exchen's blog » 内存映射文件