LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh, // смещение
DWORD dwFileOffsetLow, // в файле
SIZE_T dwNumberOfBytesToMap // размер
);
CreateFileMapping - весь файл сразу маппирует?
Не пойму, CreateFileMapping на входе хэндл файла, потом результат используем в MapViewOfFile и ... весь файл в памяти?
Код:
DWORD dwFileOffsetLow, // в файле
SIZE_T dwNumberOfBytesToMap // размер
а можно пример?
PS:ну и промаппирует оно dwNumberOfBytesToMap один раз, а как весь файл читать?
dwFileOffsetLow - младшая часть смещения мэппируемой части в файле;
dwFileOffsetHigh - старшая часть смещения мэппируемой части в файле, используется в том случае, если размер файла >= 4 Gb.
Пример:
Код:
hMapFile = CreateFileMapping( ... );
if ((hMapFile == NULL) || (hMapFile == INVALID_FILE_HANDLE))
return;
// мэппируем первую половину файла
buffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, FileSize / 2);
if (buffer == NULL)
return;
/*
что-то делаем с данными
*/
UnmapViewOfFile(buffer);
// мэппируем вторую половину файла
buffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, FileSize / 2, FileSize - FileSize / 2);
if (buffer == NULL)
return;
/*
что-то делаем с данными
*/
UnmapViewOfFile(buffer);
CloseHandle(hMapFile);
if ((hMapFile == NULL) || (hMapFile == INVALID_FILE_HANDLE))
return;
// мэппируем первую половину файла
buffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, FileSize / 2);
if (buffer == NULL)
return;
/*
что-то делаем с данными
*/
UnmapViewOfFile(buffer);
// мэппируем вторую половину файла
buffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, FileSize / 2, FileSize - FileSize / 2);
if (buffer == NULL)
return;
/*
что-то делаем с данными
*/
UnmapViewOfFile(buffer);
CloseHandle(hMapFile);