Как получить следующую страницу / часть / вид файла, если я прочитал часть файла с помощью MapViewOfFile? - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь использовать комбинацию функций CreateFileMapping, MapViewOfFile, FlushViewOfFile.

общий размер буфера больше отображенного представления. пример буфера составляет 50 КБ. и сопоставленное представление составляет 2 КБ. в таком сценарии, я хочу записать общий буфер в физический файл, используя вышеуказанную функцию.

Первая часть, которую я могу записать в файл. но остальная часть как записать в файл. Я имею в виду, как перейти на следующую страницу и записать следующую часть данных.

    #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

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Повторите ваш вызов MapViewOfFile с другим диапазоном.

0 голосов
/ 10 ноября 2011

, как описано в следующей ссылке,

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

Вы можете проверить «гранулярность распределения», я думаю, вам следует использовать этот параметр, чтобы установить значения для «dwFileOffsetLow» или"dwFileOffsetHigh".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...