Другие средства обработки файлов и модуль DOS

Для того чтобы определить, есть ли на диске файл с заданным именем, удобно использовать уже известную нам стандартную функцию IOResult , которая возвращает ноль при успешном завершении последней операции ввода-вывода и ненулевое значение в случае ошибки. Открытие файла также является операцией ввода-вывода, а открытие несуществующего файла процедурой Reset является ошибкой. Запишем программу, которая будет вводить имя файла и определять, есть ли такой файл в текущей директории.

 

Var

Name : String[12];

f : File;

Begin

Write(‘Введите имя файла ’);

ReadLn(Name);

Assign(f,Name); {инициализируем файл, пока не важно, существует ли он}

{$I-} {отключаем контроль ошибок ввода-вывода, чтобы избежать аварийного завершения программы}

Reset(f); {если файла нет, то IOResult вернет не ноль}

If IOResult<>0 Then Begin WriteLn(‘Файла нет’); Halt(1); End;

{$I+} {вновь включаем контроль ошибок ввода-вывода}

{здесь можно читать файл }

End.

 

В Паскале есть четыре стандартных процедуры для работы с директориями:

Procedure GetDir(Disk: Byte; VarDir: String) - возвращает полное имя (включающее путь) текущей директории на указанном диске, входной параметр Dir может принимать значения 0 - текущий диск, 1 - диск A, 2 - диск B,... 26 - диск Z.

Procedure ChDir(Dir: String) - позволяет перейти в директорию, заданную параметром Dir, аналогична команде chdir (или cd) операционной системы DOS. Значением параметра Dir может быть как полное имя директории, так и простое имя, в этом случае она считается поддиректорией текущей директории. Если директории Dir не существует, происходит ошибка ввода-вывода.

Procedure MkDir(Dir: String) - создает поддиректорию текущей директории с именем Dir, аналогична одноименной команде DOS; если такая директория уже существует, происходит ошибка ввода-вывода.

Procedure RmDir(Dir: String) - уничтожает поддиректорию Dir, аналогична одноименной команде DOS, если директория не пуста или ее не существует, происходит ошибка ввода-вывода. Используя опцию компилятора {$I-} и функцию IOResult, вы можете писать надежные программы, работающие с директориями, которые будут застрахованы от аварийных прерываний.

МодульDOS объединяет средства, позволяющие выполнять некоторые функции операционной системы. Мы изучим лишь часть из них.

1. Procedure GetDate(Var Year, Month, Day, DayOfWeek: Word) - возвращает текущую дату: год, номер месяца, число и номер дня недели; 0 соответствует воскресенью, 6 - субботе.

2.Procedure GetTime(VarHour, Minute, Second, Sec100: Word) - возвращает текущее время: часы, минуты, секунды и сотые доли секунды.

3. Procedure FindFirst(Mask: String; Attr: Byte; Var F: SearchRec) - ищет в текущей или указанной директории первый файл, соответствующий заданной маске и атрибуту. Возвращает информацию о файле в переменной F. Маска может включать путь (если путь не задан, то поиск происходит в текущей директории) и должна содержать либо имя файла, либо шаблон (с использованием символов *и ?). Параметр Attr может принимать одно из следующих значений :

ReadOnly=$01 - файл только для чтения,

Hidden=$02 - скрытый файл,

SysFile=$04 - системный файл,

VolumeID =$08 - заголовок тома,

Directory=$10 - директория,

Archive=$20 - архивный файл,

AnyFile=$3F - любой файл

либо быть равным сумме какой-нибудь комбинации этих констант. Тип SearchRec определен в модуле DOS таким образом: