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.