首页
社区
课程
招聘
未解决 [求助]CreateFileMapping如何分段映射
发表于: 2020-12-20 11:32 1815

未解决 [求助]CreateFileMapping如何分段映射

2020-12-20 11:32
1815

HANDLE CreateFileMapping(
  HANDLE hFile,                       //物理文件句柄
  LPSECURITY_ATTRIBUTES lpAttributes, //安全设置
  DWORD flProtect,                    //保护设置
  DWORD dwMaximumSizeHigh,            //高位文件大小
  DWORD dwMaximumSizeLow,             //低位文件大小
  LPCTSTR lpName                      //共享内存名称
);


我这个函数映射开超过1.7G的文件的时候会失败,如果我有一个文件想
每次映射成1G,分2次完成,代码应该如何写?

        hFileMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);     // 超大文件

时该处失败  
    if(hFileMap == NULL)  
   {  
      printf("创建原文件映射对象句柄失败:%d。\n",GetLastError());  
      CloseHandle(hFile);  
      return -1;  
   }

文件要是大于1.7G的话,代码运行会报错



下面的2个变量是可以设置成1G或者,分割的余数
  DWORD dwMaximumSizeHigh,            // 高位文件大小
  DWORD dwMaximumSizeLow,             // 低位文件大小

MapViewOfFile如何正确映射到内存啊?


还有一个问题,映射1G的内存,下面的2个数值应该如何填写?

文档上说是64k的整数倍。


下面的2个变量是可以设置成1G或者,分割的余数
  DWORD dwMaximumSizeHigh,            // 高位文件大小
  DWORD dwMaximumSizeLow,             // 低位文件大小


=================================


在映射大于4gb的文件时。一开始,把文件的开头部分映射到视图中。完成文件的第一个视
图的访问后,撤销对文件这部分的映射,然后把文件的另一部分映射到视图中。一直重复这
个过程,直到完成对整个文件的访问。

这是我网上搜到的,撤销对文件这部分的映射怎么理解,
使用unMapOfView函数,还是直接改变MapOfView的参数?



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-12-20 12:07 被limee编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 181
活跃值: (636)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
32位吧....你会发现你 malloc和new BYTE[xx] 大于1.7G都会失败,
2020-12-20 12:49
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hFileMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,1024*1024*1024,NULL);     // 分配1G的内存映像

分配1G内存映像的代码是不是这样写?

    hFileMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,1024*1024*1024,NULL);     // 分配1G的内存映像
    
        if(hFileMap == NULL)  
   {  
      printf("创建原文件映射对象句柄失败:%d。\n",GetLastError());  
      CloseHandle(hFile);  
      return -1;  
   } 
我的代码运行报错,GetLastError的值是8,是什么错误?
有一次运行又是好的,到底是什么问题啊?
2020-12-20 14:06
0
游客
登录 | 注册 方可回帖
返回
//