Для тех, кто переходит на Delphi не с прежних версий Turbo Pascal, а с С, других языков или начинает освоение с "нуля", более привычными будут стандартные функции работы с файлами Windows. Тем более, что возможности ввода/вывода в них расширены. Каждый файл в этом наборе функций описывается не переменной, а дескриптором (Handle) - 32-разрядной величиной, которая идентифицирует файл в операционной системе.
В Win32 файл открывается при помощи функции, имеющей обманчивое название:
function CreateFile(lpFileName: PChar; dwDesiredAccess,
dsAfiheoreMode: ШОКЕ);
IpSecurityAttributes : PSecurityAttributes;
dsACreationDistribution, dwFlagsAndAttributes: ШОКЕ);
hTemplateFile: THandle): THandle;
Хоть ее название и начинается с Create, но она позволяет не только создавать, но и открывать уже существующие файлы.
Такое огромное количество параметров оправдано, т. к. CreateFile используется для открытия файлов на диске, устройств, каналов, портов и вообще любых источников ввода/вывода. Назначение параметров описано в табл. 9.2.
Таблица 9.2. Параметры функции CreateFile
Параметр |
Описание |
lpFileName: pChar |
Имя открываемого объекта. Может представлять собой традиционную строку с путем и именем файла, UNC (для открытия объектов в сети, имя порта, драйвера или устройства) |
dwDesiredAccess,: ГЖЖ) |
Способ доступа к объекту. Может быть равен: • GENERIC_READ -ДЛЯчтения; GENERICWRITE - ДЛЯ ЗаПИСИ. Их комбинация позволяет открыть файл для чтения и записи. Параметр 0 применяется, если нужно получить атрибуты файла без его фактического открытия |
dwShareMode: ГЖГО |
Режим совместного использования файла:
• FILE_SHARE_WRITE - ДЛЯ ЗаПИСИ. Их комбинация - для полного совместного доступа |
IpSecurityAttributes: PSecurityAttributes |
Атрибуты защиты файла. В Windows 95/98 не используются (должны быть равны nil). В Windows NT/2000 этот параметр, равный nil, дает объекту атрибуты по умолчанию |
Таблица 9.2 (окончание)
Параметр |
Описание |
|
Способ открытия файла: |
CREATE_NEW - создается новый файл, если |
|
таковой уже существует, функция возвра- |
|
|
|
CREATE_ALWAYS- создается новый файл, |
|
если таковой уже существует, он переза- |
|
|
|
OPEN_EXISTING - открывает существую- |
|
щий файл, если таковой не найден, функ- |
|
|
|
OPEN ALWAYS - открывает существующий |
|
файл, если таковой не найден, он созда- |
|
ется |
|
|
Набор атрибутов (скрытый, системный, сжа- |
тый) и флагов для открытия объекта. Подроб- |
|
ное описание см. в документации по Win32 |
|
hTemplateFile: THandle |
Файл-шаблон, атрибуты которого используют- |
ся для открытия. В Windows 95/98 не исполь- |
|
зуется и должен быть равен О |
Функция createFile возвращает дескриптор открытого объекта ввода/вывода. Если открытие невозможно из-за ошибок, возвращается код invalid_handle_value, а расширенный код ошибки можно узнать, вызвав фунщию GetLastError.