主要是关于MapViewOfFile()的参数设置问题
我想在已经创建好的文件映射对象上可以随便操作文件指针
类似于fseek()函数一样,现在就是MapViewOfFile()函数的参数不知道如何设置
例如我想从开始位置移动5个字节,然后开始读10个字节
将这个10个字节取出。不知道那位能指点一二?

解决方案 »

  1.   

    关于文件映射:http://community.csdn.net/Expert/topic/3393/3393211.xml?temp=.495083
      

  2.   

    我主要是MapViewOfFile()不会用~~其他基本明白了
      

  3.   

    MapViewOfFile()里面的后面3各参数是什么意思啊?
    LPVOID MapViewOfFile(
      HANDLE hFileMappingObject,  // file-mapping object to map into 
                                  // address space
      DWORD dwDesiredAccess,      // access mode
      DWORD dwFileOffsetHigh,     // high-order 32 bits of file offset
      DWORD dwFileOffsetLow,      // low-order 32 bits of file offset
      DWORD dwNumberOfBytesToMap  // number of bytes to map
    );
      

  4.   

    dwFileOffsetLow,dwFileOffsetHigh指定从文件开头的多少字节开始map,dwNumberOfBytesToMap表示要map多少字节。
      

  5.   

    MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,5,0,100);
    为什么这样后错误了?
      

  6.   

    MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,5,100);
    这样后出现错误号位1132
    我查了一下The base address or the file offset specified does not have the proper alignment. 这个错误~
      

  7.   

    LPVOID MapViewOfFile(HANDLE hFileMappingObject,
    DWORD dwDesiredAccess,
    DWORD dwFileOffsetHigh,
    DWORD dwFileOffsetLow,
    DWORD dwNumberOfBytesToMap); dwDesiredAccess用来指定我们想对文件进行的操作。在我们例子中,我们只想读,故指定标志FILE_MAP_READ。
    dwFileOffsetHigh 和 dwFileOffsetLow 用来指定打开文件中欲映射的起始偏移位置。我们的例子中想映射整个的文件,故指定它们的值为0。
    dwNumberOfBytesToMap 用来指定欲映射的字节数,如果想映射整个的文件,设定该值为0。
      

  8.   

    DWORD dwFileOffsetHigh,
    DWORD dwFileOffsetLow
    必须是操作系统的分配粒度的整数倍,对于Windows操作系统,分配粒度固定为64KB
      

  9.   

    你可以这样:
    // 设定大小、偏移量等参数
    __int64 qwFileSize = 0x4000000;
    __int64 qwFileOffset = 0;
    DWORD dwBytesInBlock = 10 * sinf.dwAllocationGranularity;// 将文件数据映射到进程的地址空间
    PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,
    FILE_MAP_ALL_ACCESS,
    (DWORD)(qwFileOffset>>32), (DWORD)(qwFileOffset&0xFFFFFFFF), dwBytesInBlock);然后用pbFile操作就行了
      

  10.   

    程序中是MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,5,0,100);?如果是这样的话就是从0x50000开始了,文件没这么大就会报错。
      

  11.   

    MapViewOfFile(m_hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,5,100);这种情况下报错,赞同crystal521(水晶泪) 的观点
      

  12.   

    还有个问题:
    MapViewOfFile()得到的Handle可以直接操作了吗?
    用api和CFile可以吗?