How to get the next page/part/view of file, if i r

2019-06-10 08:40发布

问题:

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