关于MapViewOfFile的问题

北京的雾霾天 2010-11-30 12:19:25
在MSDN中对于MapViewOfFile 的参数有如下的一段文字:

dwNumberOfBytesToMap [in]
The number of bytes of a file mapping to map to the view. All bytes must be within the maximum size specified by CreateFileMapping. If this parameter is 0 (zero), the mapping extends from the specified offset to the end of the file mapping.

参见:http://msdn.microsoft.com/en-us/library/aa366761(VS.85).aspx




这一段文字是说参数dwNumberOfBytesToMap 不能大于在CreateFileMapping中的指定的最大长度吗?
那么怎样能做到扩大文件呢?


我在如下的两个地址看到了一些用法:
http://developer.51cto.com/art/200609/32136_2.htm
http://www.yesky.com/405/1756405_1.shtml

他们均指定了大于CreateFileMapping参数中指定的值,这又是什么?

我E文不好,该怎么样理解这个MapViewOfFile的dwNumberOfBytesToMap 参数呢?
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pady_pady 2010-11-30
  • 打赏
  • 举报
回复
while (qwFileOffset > 0)
实际上qwFileOffset 初始为0 一次也不会进入循环,
北京的雾霾天 2010-11-30
  • 打赏
  • 举报
回复
多谢解答。但能说明一下他的错误是什么吗?
pady_pady 2010-11-30
  • 打赏
  • 举报
回复

  while (qwFileSize > 0)
  {

 if (qwFileSize < 1000 * dwGran)
  dwBlockBytes = (DWORD)qwFileSize;

   // 映射视图
   LPBYTE lpbMapAddress = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,
      (DWORD)(qwFileOffset >> 32), (DWORD)(qwFileOffset & 0xFFFFFFFF),
      dwBlockBytes);
   if (lpbMapAddress == NULL)
   {
    TRACE("映射文件映射失败,错误代码:%d\r\n", GetLastError());
    return;
   }
   // 对映射的视图进行访问
   for(DWORD i = 0; i < dwBlockBytes; i++)
    BYTE temp = *(lpbMapAddress + i);
    // 撤消文件映像
    UnmapViewOfFile(lpbMapAddress);
    // 修正参数
    qwFileOffset += dwBlockBytes;
    qwFileSize -= dwBlockBytes;
  }
http://www.yesky.com/405/1756405_1.shtml
这里那个while( )循环有错误的,只是很多地方都是那种照抄模式,从来没有人更正而已
pady_pady 2010-11-30
  • 打赏
  • 举报
回复
说错,是CloseHandle( hFileMap )
关闭文件映像句柄,然后重新创建或SetFilePointer
pady_pady 2010-11-30
  • 打赏
  • 举报
回复
有两种,第一,先UmmapViewOfFile然后SetFilePointer
第二,UmmapViewOfFile,再CreateFileMap( ... )里面有文件编移的低32位和高32位位置,只要设到超过文件大小,就会自动扩展文件

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧