Попытка открыть файл
может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин
неудачи при открытии файлов может быть несколько. Например, программа попытается
открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя,
или диск не вставлен в накопитель). Другая причина — отсутствие открываемого
в режиме добавления файла (файла нет — добавлять некуда).
При запуске программы
из 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); // открыть для записи
//
здесь открыт существующий или новый файл
Знаете ли Вы, что cогласно релятивистской мифологии "гравитационное линзирование - это физическое явление, связанное с отклонением лучей света в поле тяжести. Гравитационные линзы обясняют образование кратных изображений одного и того же астрономического объекта (квазаров, галактик), когда на луч зрения от источника к наблюдателю попадает другая галактика или скопление галактик (собственно линза). В некоторых изображениях происходит усиление яркости оригинального источника." (Релятивисты приводят примеры искажения изображений галактик в качестве подтверждения ОТО - воздействия гравитации на свет) При этом они забывают, что поле действия эффекта ОТО - это малые углы вблизи поверхности звезд, где на самом деле этот эффект не наблюдается (затменные двойные). Разница в шкалах явлений реального искажения изображений галактик и мифического отклонения вблизи звезд - 1011 раз. Приведу аналогию. Можно говорить о воздействии поверхностного натяжения на форму капель, но нельзя серьезно говорить о силе поверхностного натяжения, как о причине океанских приливов. Эфирная физика находит ответ на наблюдаемое явление искажения изображений галактик. Это результат нагрева эфира вблизи галактик, изменения его плотности и, следовательно, изменения скорости света на галактических расстояниях вследствие преломления света в эфире различной плотности. Подтверждением термической природы искажения изображений галактик является прямая связь этого искажения с радиоизлучением пространства, то есть эфира в этом месте, смещение спектра CMB (космическое микроволновое излучение) в данном направлении в высокочастотную область. Подробнее читайте в FAQ по эфирной физике.