![]() |
![]() |
![]() |
Попытка открыть файл
может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин
неудачи при открытии файлов может быть несколько. Например, программа попытается
открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя,
или диск не вставлен в накопитель). Другая причина — отсутствие открываемого
в режиме добавления файла (файла нет — добавлять некуда).
При запуске программы
из 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колько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.
|
![]() |