16.4.4. Работа с атрибутами файлов
Работа с атрибутами файлов проводится при помощи двух процедур:
GetFAttr ( VAR f; VAR Attr : Word );
и
SetFAttr ( VAR f; Attr : Word ).
Они дают более простой доступ к атрибутам файла, чем рассмотренные выше способы анализа файловых типов, и позволяют переустанавливать его без опасения за корректность проводимых
- 366 -
действий. Но применение процедур требует одного условия, а именно: обобщенная файловая переменная должна быть предварительно связана с каким-либо физическим файлом на диске, но этот файл должен быть закрыт. Короче говоря, процедуры GetFAttr и SetFAttr могут появляться в программе только в связках (рис. 16.10).
| USES DOS;
| VAR
| f : File Of Real;
| t : Text;
| FA : Word;
| BEGIN
| Assign( f, 'DIFFUR.DAT'); GetFAttr( f, FA );
| if ( FA and ReadOnly ) = ReadOnly
| then SetFAttr( f, FA-ReadOnly );
| Rewrite( f );
| ...
| Close( f );
| FA := Archive + ReadOnly + Hidden;
| Assign( t, 'TEXT.FIL' ); SetFAttr( t, FA );
| ...
| END.
Рис. 16.10
В примере на рис. 16.10 анализируется атрибут файла DIFFUR.DAT, и если он содержит в себе защиту от записи, то она снимается и можно открывать файл. Второй файл TEXT.FIL снабжается целым «букетом» атрибутов защиты.
Используя константы атрибутов, легко анализировать и изменять атрибуты файлов. Пусть FA — считанный только что атрибут файла. Тогда выражение типа
( FA and Hidden ) = Hidden
анализирует наличие атрибута Hidden. Если оно истинно, то атрибут имеется. Выражение типа
FA := FA or ReadOnly
подготовит FA для установки, включив режим «только для чтения»;
FA := FA and (AnyFile - ReadOnly)
сделает все наоборот: исключит ReadOnly из суммы атрибутов, а оператор
FA := FA xor SysFile
сменит атрибут системности на обратный.
- 367 -
Использовать атрибуты нужно аккуратно, ибо установив, например, атрибут ReadOnly файлу f, мы тем самым закроем возможность открывать этот файл для записи (будет ошибка), и надо будет отключать действие этого атрибута.
Естественно, следует помнить и об эффектах иных атрибутов. Так, поставив какому-либо каталогу атрибут Hidden, не следует потом удивляться, куда он делся при подаче команды DIR, как не стоит удивляться тому, что файлы с нарушенным атрибутом архивности не копируются командой BACKUP.