Иллюстрированный самоучитель по Delphi 7 для профессионалов

Использование отображаемых файлов

Третий и четвертый параметры также имеют тип DWORD. Это – смещение отображаемого участка относительно начала файла в байтах. В нашем случае эти параметры должны быть установлены в нуль, поскольку значение, которое мы даем пятому (последнему) параметру функции MapViewOfFile, также равно нулю.

Пятый (и последний) параметр функции MapViewOfFile, как и предыдущие параметры, имеет тип DWORD. Он используется для определения (в байтах) количества данных объекта файлового отображения, которые надо отобразить в процесс (сделать доступными для вас). Для достижения наших целей это значение должно быть установлено в нуль, что означает автоматическое отображение в процессе всех данных, выделенных перед этим функцией CreateFileMapping.

Значение, возвращаемое функцией MapViewOfFile, имеет тип "указатель".

Если функция отработала успешно, то она вернет начальный адрес данных объекта файлового отображения.

Следующий фрагмент кода демонстрирует вызов функции MapViewOfFile:

var
hMappedFile: THandle; pSharedBuf: PChar;
begin
hMappedFile: =
CreateFiieMapping(FHandle, nil, PAGE_READWRITE, 0, 0, 'SharedBlock');
if {hMappedFile = 0) then
ShowMessage('Mapping error!')
else
begin
pSharedBuf: =
MapViewOfFiie(hMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (pSharedBuf = nil) then
ShowMessage ('MapView error');
end;
end;

После того как получен указатель pSharedBuf, вы можете работать со своим файлом как с обычной областью памяти, не заботясь о вводе, выводе, позиционировании и т. п. Все эти проблемы берет на себя файловая система. Последние две функции, имеющие отношение к объекту файлового отображения, называются UnMapViewOfFile и CloseHandle.

Функция UnMapViewOfFile делает то, что подразумевает ее название. Она прекращает отображение в адресное пространство процесса того файла, который перед этим был отображен При помощи функции MapViewOfFile. Функция CloseHandle закрывает дескриптор объекта файлового отображения, возвращаемый функцией CreateFileMapping.

Функция UnMapViewOfFile должна вызываться перед функцией CloseHandle.

Функция UnMapViewOfFile передает единственный параметр типа указатель:

procedure TClientForm.FormDestroy(Sender: TObject);
begin
UnMapViewOfFile(pSharedBuf};
CloseHandle(hFileMapObj);
end;

Отображаемые файлы уже будут использоваться и в других главах этой книги. Не стоит удивляться, ведь это очень мощный инструмент: помимо возможности совместного доступа он позволяет заметно ускорить доступ к файлам, особенно большого размера.

Резюме

При разработке приложений очень часто приходится решать задачи обмена данными между приложениями или приложением и устройством ввода/вывода. При этом большая часть созданного кода обеспечивает работу приложения с файлами.

В этой главе рассмотрены методы, обеспечивающие взаимодействие программы с файловой системой и примеры их использования.

Для организации обмена данными в приложениях используются специальные объекты – потоки, которые не только хранят информацию во время выполнения приложения, но и предоставляют разработчику набор стандартных свойств и методов для управления данными.

Затруднительно сказать, при изучении каких глав будет полезен материал этой главы. Скорее всего, он понадобится везде.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.