内存映射文件详解

您所在的位置:网站首页 vc如何读取dat文件 内存映射文件详解

内存映射文件详解

#内存映射文件详解| 来源: 网络整理| 查看: 265

先不说内存映射文件(即一块内存和一个文件相映射对应)是什么。贴个代码先,。

[cpp]  view plain copy print ? #include    #include    #include    #include    using namespace std;      int main()   {       //开始       //获得文件句柄       HANDLE hFile=CreateFile(           "c:\\test.dat",   //文件名           GENERIC_READ|GENERIC_WRITE, //对文件进行读写操作           FILE_SHARE_READ|FILE_SHARE_WRITE,           NULL,                OPEN_EXISTING,  //打开已存在文件           FILE_ATTRIBUTE_NORMAL,              0);            //返回值size_high,size_low分别表示文件大小的高32位/低32位       DWORD size_low,size_high;       size_low= GetFileSize(hFile,&size_high);           //创建文件的内存映射文件。          HANDLE hMapFile=CreateFileMapping(             hFile,                NULL,              PAGE_READWRITE,  //对映射文件进行读写           size_high,               size_low,   //这两个参数共64位,所以支持的最大文件长度为16EB           NULL);          if(hMapFile==INVALID_HANDLE_VALUE)          {              AfxMessageBox("Can't create file mapping.Error%d:\n",   GetLastError());              CloseHandle(hFile);           return 0;          }            //把文件数据映射到进程的地址空间       void* pvFile=MapViewOfFile(           hMapFile,            FILE_MAP_READ|FILE_MAP_WRITE,            0,           0,           0);         unsigned char *p=(unsigned char*)pvFile;           //至此,就获得了外部文件test.dat在内存地址空间的映射,       //下面就可以用指针p"折磨"这个文件了       CString s;       p[size_low-1]='!';        p[size_low-2]='X'; //修改该文件的最后两个字节(文件大小          error_code = GetLastError();          cout              CloseHandle(mmHandle);                         cout              if (mmfm == NULL){                  if (mmHandle != INVALID_HANDLE_VALUE){                      CloseHandle(mmHandle);                  }              } else {                  //char write_chars[] = "hello chars";                  //size_t position = 0;                  //DWORD written = 0;                  //const size_t write_chars_size = sizeof(write_chars);                  //WriteFile(mmHandle,write_chars,write_chars_size,&written,NULL);                  size_t  view_size = 1024*256;                  DWORD  view_access = FILE_MAP_ALL_ACCESS;                    //获得映射视图                  char * mmfm_base_address = ( char *)MapViewOfFile(mmfm,view_access,0,0,view_size);                  if (mmfm_base_address == NULL){                      error_code = GetLastError();                      if (error_code != SUCCESS){                          cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3