vc內存映射文件操作

 // TODO: Add extra validation here
 
 //CDialog::OnOK();
 CString   filename;  
 HANDLE   hNewFile=INVALID_HANDLE_VALUE;  
 HANDLE   hMap=NULL;  
 HANDLE   hlParam=NULL;  
 LPVOID   lpBuffer=0;  
 filename = "g://test.txt";  
 CString   ch="打開文件"+filename+"失敗!";  

 try  
 {  
  HANDLE   hNewFile=CreateFile(filename, GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
          FILE_ATTRIBUTE_NORMAL,NULL);  
  if(hNewFile==INVALID_HANDLE_VALUE)  
   throw   "創建文件失敗!";  
  HANDLE   hMap=CreateFileMapping(hNewFile,NULL,PAGE_READWRITE,0,0,NULL);  
  
  // 得到文件尺寸
  DWORD dwFileSizeHigh;
  __int64 qwFileSize = GetFileSize(hNewFile, &dwFileSizeHigh);
  qwFileSize |= (((__int64)dwFileSizeHigh) << 32);
  
  SYSTEM_INFO SysInfo;
     GetSystemInfo(&SysInfo);
     DWORD dwGran = SysInfo.dwAllocationGranularity;


  // 關閉文件對象
  //CloseHandle(hMap);


  if(hMap==NULL)  
   throw   "創建內存映射文件失敗!";  

  DWORD dwBlockBytes = (DWORD)qwFileSize;

  LPBYTE   offset =  (LPBYTE)MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,
   0,0,dwBlockBytes);  
  DWORD err = ::GetLastError();

  if(offset==NULL)  {
   throw   "文件視圖映射時失敗!";  
  
  }else{
   for(int i = 0;i < dwBlockBytes; i ++){
    BYTE temp = *(offset + i);
    int n = 0;
   }
  }
 }
 catch(char*ch)  
 {  
  AfxMessageBox(ch);  
  if(hMap!=NULL)  
   CloseHandle(hMap);  
  if(hNewFile!=INVALID_HANDLE_VALUE)  
   CloseHandle(hNewFile);  
  
 }  

 UnmapViewOfFile(hlParam);  
 //FlushViewOfFile(hlParam,0);  
 CloseHandle(hMap);  
 CloseHandle(hNewFile); 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章