写入数据:
#include <iostream> #include <windows.h> using namespace std; typedef struct tagData { int n; float f; char c; }DATA,*PDATA; #define FILE_SIZE sizeof(DATA) #define FILE_MAPPING_NAME "FileMappingName" void main(int argc,TCHAR*argv[]) { HANDLE hFile = CreateFile("D://text.txt",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_MAP_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE == hFile) return; HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,FILE_SIZE,FILE_MAPPING_NAME); if(NULL == hFileMapping) return; LPVOID lpMem = MapViewOfFile(hFileMapping,FILE_MAP_ALL_ACCESS,0,0,FILE_SIZE); if(NULL == lpMem) return; //2个的此处不同 写入 memset(lpMem,0,FILE_SIZE); PDATA pData = (PDATA)lpMem; pData->n = 10; pData->f = 100.001; pData->c = 'g'; //2个的此处不同 写入 if(!UnmapViewOfFile(lpMem)) return; CloseHandle(hFileMapping); CloseHandle(hFile); cout<<"succeed"<<endl; }
读取数据:
#include <iostream> #include <windows.h> using namespace std; typedef struct tagData { int n; float f; char c; }DATA,*PDATA; #define FILE_SIZE sizeof(DATA) #define FILE_MAPPING_NAME "FileMappingName" void main(int argc,TCHAR*argv[]) { HANDLE hFile = CreateFile("D://text.txt",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_MAP_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE == hFile) return; HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,FILE_SIZE,FILE_MAPPING_NAME); if(NULL == hFileMapping) return; LPVOID lpMem = MapViewOfFile(hFileMapping,FILE_MAP_ALL_ACCESS,0,0,FILE_SIZE); if(NULL == lpMem) return; //2个的此处不同 读取 PDATA pData = (PDATA)lpMem; cout<<pData->n<<endl; cout<<pData->f<<endl; cout<<pData->c<<endl; //2个的此处不同 读取 if(!UnmapViewOfFile(lpMem)) return; CloseHandle(hFileMapping); CloseHandle(hFile); cout<<"succeed"<<endl; }