Директива $I компилятора Delphi позволяет встроить код указанного файла в модуль.
- {$I FileName}
- {$I-}
- {$I+}
Директива компилятора $I охватывает две цели. Во-первых, для включения кода файла в текущий модуль. Во-вторых, для управления выдачей исключений при ошибке IO (ввода/вывода).
Вариант 1.
Это очень полезно для включения директив компилятора или общего кода во все ваши модули для гарантирования последовательности и отдельной точки управления. По умолчанию расширение файла .pas, поэтому для .pas файлов требуется только имя файла.
Используйте кавычки, если имя файла включает один или более пробелов.
Например:
Common.pas file:
{$ReferenceInfo On}
{$RangeChecks On}
{$OverFlowChecks On}
Unit1.pas file:
...
{$I Common}
...
Варианты 2 и 3.
Значение по умолчанию {$I +} генерирует EInOutError исключение, когда происходит ошибка IO. При {$I-} исключение не генерируется. Вместо этого, ответственность за проверку операций ввода/вывода возлагается на IOResult подпрограмм.
Примечания.
$I FileName эквивалентно $Include FileName.
$I- эквивалентна $IOChecks Off.
$I+ эквивалентна $IOChecks On.
Эта директива может использоваться в вашем коде многократно.
Директива компилятора $I: Заманивание в ловушку IO исключений, и использование IOResult
var
error : Integer;
begin
// Попытка создать новый подкаталог в текущем каталоге
// Выключение проверки ошибок ввода/вывода
{$I-}
MkDir('TempDirectory');
// Каталог создался?
error := IOResult;
if error = 0
then ShowMessage('Каталог создался')
else ShowMessageFmt('Создание каталога потерпело неудачу с ошибкой %d',[error]);
// Попытка создать новый подкаталог в текущем каталоге - произойдёт ошибка!
MkDir('TempDirectory');
error := IOResult;
if error = 0
then ShowMessage('Каталог создался снова')
else ShowMessageFmt('Повтор создания провалился с ошибкой %d',[error]);
// Удаление каталога для очистки
RmDir('TempDirectory');
// Включение проверки ошибок ввода/вывода
{$I+}
end;
Результат
Каталог создался
Повтор создания провалился с ошибкой 183
Похожие функции, процедуры и команды
$Include — позволяет коду в указанном файле быть включенным в Модуль.
$IOChecks — когда включено, ошибка операции ввода-вывода вызывает исключение.
IOResult — содержит возвращаемый код последней операции ввода/вывода.
