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

Ввод/вывод с использованием функций Windows API

Для тех, кто переходит на Delphi не с прежних версий Turbo Pascal, а с С, других языков или начинает освоение с "нуля", более привычными будут стандартные функции работы с файлами Windows. Тем более, что возможности ввода/вывода в них расширены. Каждый файл в этом наборе функций описывается не переменной, а дескриптором (Handle) – 32-разрядной величиной, которая идентифицирует файл в операционной системе.

В Win32 файл открывается при помощи функции, имеющей обманчивое название:

function CreateFile(IpFileName: PChar; dwDesiredAccess,
dwShareMode: DWORD; IpSecurityAttributes: PSecurityAttributes;
dwCreationDistribution, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle;

Хоть ее название и начинается с create, но она позволяет не только создавать, но и открывать уже существующие файлы.

Такое огромное количество параметров оправдано, т. к. createFile используется для открытия файлов на диске, устройств, каналов, портов и вообще любых источников ввода/вывода. Назначение параметров описано в табл. 9.2.

Таблица 9.2. Параметры функции CreateFile.

Параметр Описание
IpFileName:pChar Имя открываемого объекта. Может представлять собой традиционную строку с путем и именем файла, UNC (для открытия объектов в сети, имя порта, драйвера или устройства)
dwDesiredAccess:DWORD Способ доступа к объекту. Может быть равен:
GENERIC READ – для чтения; GENERIC WRITE – для записи.
Их комбинация позволяет открыть файл для чтения и записи. Параметр 0 применяется, если нужно получить атрибуты файла без его фактического открытия
dwShareMode:DWORD Режим совместного использования файла:
0 – совместный доступ запрещен; FILE SHARE READ – для чтения; FILE_SHARE_WRITE – для записи.
Их комбинация – для полного совместного доступа
IpSecurityAttributes:PSecurityAttributes Атрибуты защиты файла. В Windows 95/98 не используются (должны быть равны nil). В Windows NT/2000 этот параметр, равный nil, дает объекту атрибуты по умолчанию
dwCreationDistribution: DWORD; Способ открытия файла:
CREATE NEW – создается новый файл, если таковой уже существует, функция возвращает ошибку ERROR_ALREADY_EXISTS;
CREATE ALWAYS – создается новый файл, если таковой уже существует, он перезаписывается;
OPEN EXISTING – открывает существующий файл, если таковой не найден, функция возвращает ошибку;
OPEN ALWAYS – открывает существующий файл, если таковой не найден, он создается
dwFlagsAndAttributes: DWORD; Набор атрибутов (скрытый, системный, сжатый) и флагов для открытия объекта. Подробное описание см. в документации по Win32
hTemplateFile: THandle Файл-шаблон, атрибуты которого используются для открытия. В Windows 95/98 не используется и должен быть равен 0

Функция createFile возвращает дескриптор открытого объекта ввода/вывода. Если открытие невозможно из-за ошибок, возвращается код INVALID_HANDLE_VALUE, а расширенный код ошибки можно узнать, вызвав функцию GetLastError.

Закрывается файл в Win32 функцией closeHandle (не closeFile, a closeHandle! Правда, "легко" запомнить? Что поделать, так их назвали разработчики Win32).

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