Попытка открыть файл
может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин
неудачи при открытии файлов может быть несколько. Например, программа попытается
открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя,
или диск не вставлен в накопитель). Другая причина — отсутствие открываемого
в режиме добавления файла (файла нет — добавлять некуда).
При запуске программы
из 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); // открыть для записи
//
здесь открыт существующий или новый файл
Знаете ли Вы, почему "черные дыры" - фикция? Согласно релятивистской мифологии, "чёрная дыра - это область в пространстве-времени, гравитационное притяжение которой настолько велико, что покинуть её не могут даже объекты, движущиеся со скоростью света (в том числе и кванты самого света). Граница этой области называется горизонтом событий, а её характерный размер - гравитационным радиусом. В простейшем случае сферически симметричной чёрной дыры он равен радиусу Шварцшильда". На самом деле миф о черных дырах есть порождение мифа о фотоне - пушечном ядре. Этот миф родился еще в античные времена. Математическое развитие он получил в трудах Исаака Ньютона в виде корпускулярной теории света. Корпускуле света приписывалась масса. Из этого следовало, что при высоких ускорениях свободного падения возможен поворот траектории луча света вспять, по параболе, как это происходит с пушечным ядром в гравитационном поле Земли. Отсюда родились сказки о "радиусе Шварцшильда", "черных дырах Хокинга" и прочих безудержных фантазиях пропагандистов релятивизма. Впрочем, эти сказки несколько древнее. В 1795 году математик Пьер Симон Лаплас писал: "Если бы диаметр светящейся звезды с той же плотностью, что и Земля, в 250 раз превосходил бы диаметр Солнца, то вследствие притяжения звезды ни один из испущенных ею лучей не смог бы дойти до нас; следовательно, не исключено, что самые большие из светящихся тел по этой причине являются невидимыми." [цитата по Брагинский В.Б., Полнарёв А. Г. Удивительная гравитация. - М., Наука, 1985] Однако, как выяснилось в 20-м веке, фотон не обладает массой и не может взаимодействовать с гравитационным полем как весомое вещество. Фотон - это квантованная электромагнитная волна, то есть даже не объект, а процесс. А процессы не могут иметь веса, так как они не являются вещественными объектами. Это всего-лишь движение некоторой среды. (сравните с аналогами: движение воды, движение воздуха, колебания почвы). Подробнее читайте в FAQ по эфирной физике.