Обработка больших файлов - часть 2
for (DWORD dwByte = 0; dwByte < dwBytesInBlock; dwByte++)
{
if (pbFilfe[dwByte] == 0)
qwNumOfOs++;
}
// прекращаем проецирование представления, чтобы в адресном пространстве
// не образовалось несколько представлений одного файла
UnmapViewOfFiie(pbFile);
// переходим к следующей группе байтов в файле
qwFileOffset += dwBytesInBlock;
qwFileSize -= dwBytesInBlock;
}
CloseHandle(hFileMapping);
return(qwNumOfOs);
}
Этот алгоритм проецирует представления по 64 Кб (в соответствии с грануляр ностью выделения памяти) или менее Кроме того, функция MapViewOfFile требует, чтобы передаваемое ей смещение в файле тоже было кратно гранулярности выделе ния памяти. Подпрограмма проецирует на адресное пространство сначала одно пред ставление, подсчитывает в нем количество нулей, затем переходит к другому пред ставлению, и все повторяется. Спроецировав и просмотрев все 64-килобайтовые бло ки, подпрограмма закрывает объект «проекция файла».