Директива $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 — містить код останньої операції введення/виводу, що повертається.
