Песни о Паскале | страница 99
>{ P_27_1 – определение наличия заданного файла }
>function FileExists(const aName: string): boolean;
>var F: text;
>begin
> FileExists:= false; { предполагаем, что файла нет }
> Assign(F, aName);
> {$I-} Reset(F); {$I+} { контроль отключен на время Reset }
> if IOResult=0 then begin { если файл существует }
> Close(F); { закрываем файл }
> FileExists:= true;
> end;
>end;
>begin {--- главная программа ---}
> Writeln( FileExists('AUTO.BAT') ); { печатает false }
> Writeln( FileExists('C:\AUTOEXEC.BAT') ); { печатает true }
>end.
В выделеной строке процедура открытия файла Reset заключена между парой директив. Первая из них отключает контроль ошибок ввода-вывода, а вторая снова включает его. Это значит, что при выполнении процедуры Reset программа не прервется даже при отсутствии открываемого файла. Причем это уже не будет зависеть от состояния флажка в опциях компилятора, поскольку директивы имеют преимущество перед флажками, то есть более высокий приоритет.
Как сработает наша функция? После попытки открыть файл вызовем функцию IOResult. Если она вернула ноль, значит, файл существует, и его надо закрыть, поскольку никаких действий с ним внутри функции FileExists не намечается. Проверьте работу этой полезной функции, она ещё пригодится вам!
Разбогатев со временем собственными программами, вам, вероятно, захочется поделиться ими. При передаче исходных текстов важно передать и настройки опций компилятора, иначе EXE–файл может быть построен неправильно. Эти настройки лучше передать путём вставки директив компилятора прямо в программу. Но директив много, – запомнить их трудно, а ошибиться легко. Впрочем, есть один волшебный способ…
Откройте опции компилятора (рис. 61) и настройте в нём флажки так, как нужно, не забыв сохранить их кнопкой ОК. Затем откройте файл с программой и нажмите волшебную комбинацию клавиш Ctrl+O+O. То есть, удерживая клавишу CTRL, дважды нажмите латинскую букву «O». И – о, чудо! – в начале программы появятся строчки с настройками всех директив, например, такие.
>{$IFDEF NORMAL}
>{$H-,I+,OBJECTCHECKS-,Q-,R-,S-}
>{$ENDIF NORMAL}
>{$IFDEF DEBUG}
>{$H-,I+,OBJECTCHECKS-,Q+,R+,S-}
>{$ENDIF DEBUG}
>{$IFDEF RELEASE}
>{$H-,I-,OBJECTCHECKS-,Q-,R-,S-}
>{$ENDIF RELEASE}
Здесь представлены настройки директив для трех вариантов компиляции. Эти варианты (Normal/Debug/Release) выбираются в пункте меню Options –> Mode…. Знаки «+» и «–» соответствуют состоянию флажков в окне опций. Директивы вида $IFDEF нужны для выбора одного из вариантов компиляции (об условных директивах я расскажу в главе 60). Можно упростить эту конструкцию, оставив, лишь одну строку.