如何获得下一页/部分/文件的视图,如果我使用MapViewOfFile读取文件的一部分



我试图使用函数CreateFileMapping, MapViewOfFile, FlushViewOfFile的组合。

总缓冲区大小大于映射视图。示例缓冲区为50KB。映射视图为2KB。在这种情况下,我想用上面的函数把整个缓冲区写入一个物理文件。

第一部分我可以写入文件。但剩下的部分是如何写文件。我的意思是,如何移动到下一页,写下一部分的数据。

    #define MEM_UNIT_SIZE 100

这模块……内存映射创建器

GetTempPath (256, szTmpFile);
GetTempFileName (szTmpFile, pName, 0, szMMFile);
hFile = CreateFile (szMMFile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE,
        NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
HANDLE hFileMMF = CreateFileMapping( hFile ,NULL,PAGE_READWRITE,0,
                   (MEM_UNIT_SIZE),pName)

第二模块……内存作家

    long lBinarySize = 1000;
    long lPageSize = MEM_UNIT_SIZE;
HANDLE hFileMMF = OpenFileMapping(FILE_MAP_WRITE,FALSE,pMemName);
LPVOID pViewMMFFile = MapViewOfFile(hFileMMF,FILE_MAP_WRITE,0,0, lPageSize );
CMutex mutex (FALSE, _T("Writer"));
mutex.Lock();
try
{
    ASSERT(FALSE);
    CopyMemory(pViewMMFFile,pBinary,lPageSize); // write 
    FlushViewOfFile(pViewMMFFile,lPageSize);  
           // first 100 bytes flushed to file. 
           //how to move to next location and  write next 900 bytes..<---??
}
catch(CException e)
{
    ...
}
如果你有什么建议,请分享。提前感谢,haranadh

用不同的范围重复调用MapViewOfFile。

如以下链接所述,

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366761 (v = VS.85) . aspx

你可以检查"分配粒度",我认为你应该使用这个参数来设置"dwFileOffsetLow"或"dwFileOffsetHigh"的值

最新更新