Уроки Iczelion'а




Урок 13: Memory Mapped файлы - часть 7


dwFileOffsetHigh и dwFileOffsetLow задают стартовый файловое смещение файловой порции, которую вы хотите загрузить в память. В нашем случае нам нужно мы хотим читать весь файл, поэтому начинаем мэппинг со смещение ноль.

dwNumberOfBytesToMaр задает количество байтов, которое нужно промэппировать в память. Чтобы сделать это со всем файлом, передайте ноль MaрViewOfFile.

После вызова MaрViewOfFile, желаемое количество загружается в память. Вы получите указатель на блок памяти, который содержит данные из файла.

invoke GetFileSize,hFileRead,NULL

Теперь узнаем, какого размера наш файл. размер файла возвращается в eax.\ Если файл больше, чем 4 GB, то верхнее двойное слово размера файла сохраняется в FileSizeHighWord. Так как мы не ожидаем встретить таких больших файлов, мы можем проигнорировать это.

invoke WriteFile,hFileWrite,pMemory,eax,ADDR SizeWritten,NULL

Запишем данные в выходной файл.

invoke UnmapViewOfFile,pMemory

Когда мы заканчиваем со входным файлом, вызываем UnmapViewOfFile.

call CloseMapFile invoke CloseHandle,hFileWrite

И закрываем все файлы.

invoke SetWindowText,hWnd,ADDR AppName

Восстанавливаем оригинальное название окна.

invoke EnableMenuItem,hMenu,IDM_OPEN,MF_ENABLED invoke EnableMenuItem,hMenu,IDM_SAVE,MF_GRAYED

разрешаем доступ к пункту меню Oрen и запрещаем к Save As.

[C] Iczelion, пер. Aquila.






Содержание  Назад  Вперед