Ускорение загрузки файлов в Windows
Автор: Андрей Шевченко
Стандартный способ загрузки файлов (fopen, open, _open, fstream etc) слишком медленный по времени исполнения. Поэтому мы воспользуемся следующим кодом.
// Объявляем дескрипторы файла HANDLE fh, fh_map; // Открываем файл fh = CreateFile(filename.c_str( ), GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Если неудачно, то выходим if( fh == INVALID_HANDLE_VALUE) return false; // Получаем размер файла (если надо) size = GetFileSize( fh, NULL); // !!!!!!!!!!! Создаем file mapping object (подробную инфу смотрим в MSDN) fh_map = CreateFileMapping( fh, NULL, PAGE_READONLY, NULL, NULL, filename.c_str( )); // Если неудачно, то увы :( if( fh_map == NULL) { CloseHandle( fh); return false; }; // Функция MapViewOfFile возвращает указатель на массив с данными файла void* view_map; view_map = MapViewOfFile( fh_map, FILE_MAP_READ, NULL, NULL, NULL); if( view_map == NULL) { CloseHandle( fh_map); CloseHandle( fh); return false; }; char* data = static_cast<char*>( view_map);
А вот так это делается в POSIX-е: