Ввод/вывод с использованием функций 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).