How to get the next page/part/view of file, if i read part of file using MapViewOfFile?

别等时光非礼了梦想. 提交于 2019-12-10 11:55:28

问题


I am trying to use combination of functions CreateFileMapping , MapViewOfFile, FlushViewOfFile.

the total buffer size is more than the mapped view. example buffer is 50KB. and mapped view is 2KB. in such scenario, i want to write the total buffer to a physical file, using the above function.

First part i am able to write to file. but the remaining part how to write to file. I mean, how to move to next page and write the next part of data.

    #define MEM_UNIT_SIZE 100

-first module...Memory map creator

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)

-second module... Memory writer

    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)
{
    ...
}

please share if you have any suggestion. thanks in advance, haranadh

来源:https://stackoverflow.com/questions/8050773/how-to-get-the-next-page-part-view-of-file-if-i-read-part-of-file-using-mapview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!