Спроба відкрити файл може завершитися невдачею і викликати помилку часу виконання програми. причин невдачі при відкритті файлів може бути кілька. Наприклад, програма спробує відкрити файл на дискеті, який не готовий до роботи (не закриті шторка накопичувача, або диск не вставлено у накопичувач). Інша причина – відсутність відкривається в режимі додавання файлу (файлу немає – додавати нікуди).
При запуску програми з Delphi в разі помилки під час відкриття файлу виникає виняток, і на екрані з’являється діалогове вікно з повідомленням (рис. 7.2).
Рис. 7.2. Приклад повідомлення про помилку відкриття файлу (програма запущена з Delphi)
Якщо програма запускається з Windows, то вікно з повідомленням про помилку виглядає інакше (рис. 7.3).
Рис. 7.3. Приклад повідомлення про помилку відкриття файлу. (Програма запущена з Windows)
Програма може взяти на себе задачу контролю за результатом виконання інструкції відкриття файлу. Зробити це можна, перевіривши значення функ ції IOResult (input-Output Result – результат введення / виведення). Функція IOResuit повертає 0, якщо операція введення / виведення завершилася успішно; в іншому випадку – код помилки (Не нуль).
Для того щоб програма змогла перевірити результат виконання операції введення / виводу, потрібно дозволити їй це робити. Для цього треба перед інструкцією виклику процедури відкриття файлу помістити директиву компілятору – рядок {$ I-}, яка забороняє автоматичну обробку помилок введення / виведення. Ця директива повідомляє компілятору, що програма бере на себе контроль помилок. Після інструкції відкриття файлу слід помістити директиву {$ I +}, відновлює режим автоматичної обробки помилок введення / виведення.
На рис. 7.4 приведена блок-схема алгоритму відкриття файлу для додавання, що забезпечує створення файлу (і тим самим усуває помилку, яка виникає при спробі відкрити не існуючий файл) в разі, якщо відкривається для додавання файлу на диску ще немає.
Рис. 7.4. Алгоритм відкриття файлу з обробкою можливої помилки
Нижче наведено фрагмент програми, який реалізує наведений вище алгоритм відкриття файлу.
AssignFile (f, filename); {$ I-} Append (f) // відкрити для додавання {$ I +} if IOResult <> 0 // помилка відкриття then Rewrite (f); // відкрити для запису // тут відкрито існуючий або новий файл