| if FileExists( 'C:\PASCAL\*.PAS' ) then

| begin

| WriteLn( 'Здесь есть Паскаль-программы !');

| if FileExists( 'C:\PASCAL\demo.pas ')

| then WriteLn('...И файл DEMO тоже здесь есть!')

| else WriteLn( 'Но среди них нет файла DEMO...');

| end {then}

| else WriteLn( В каталоге нечего искать ! );

| ReadLn { пауза до нажатия клавиши ввода }

| END.

Рис. 16.8

| USES DOS; { ПРИМЕР ПОКАЗА СОДЕРЖИМОГО КАТАЛОГА }

| { ПРОЦЕДУРА ПОКАЗЫВАЕТ СПИСОК СОДЕРЖИМОГО ДИСКА ПО }

| { ШАБЛОНУ Where }

| PROCEDURE ShowDisk( Where : PathStr );

| TYPE { виды атрибутов }

| AttrType = ( RO, Hid, Sys, Vol, Dir, Arc );

| CONST { их обозначения }

| AttrText : Array[AttrType] of.Char = ('R', 'H', 'S', 'V', 'D', 'A');

| { их значения }

| AttrVal : Array [AttrType] of Byte = ( 1, 2, 4, 8, 16, 32 );

Рис. 16.9

- 364 -

| VAR

| i : AttrType; { переменная цикла по атрибутам }

| SR : SearchRec;

| DT : DateTime;

| BEGIN

| if Where=' ' { Если пустая строка, }

| then Where:='*.*'; { то дописать шаблон. }

| { Поиск происходит среди файлов и каталогов:}

| FindFirst(Where, AnyFile, SR); { найти первый файл }

| while DosError = 0 do begin { пока нет ошибки }

| with SR do begin { очередной объект }

| Write( Name:15, Size:10 );

| UnPackTime( Time, DT );

| with DT do Write(Day:5,'-',Month:2, '-',Year:4,

| Hour:5, ':', Min:2, ':', Sec:2,' ');

| for i:=RO to Arc do { Цикл по атрибутам }

| if ( Attr and AttrVal[i] ) = AttrVal[i]

| then Write(AttrText[i]) else Write( '.' );

| WriteLn

| end; {with SR}

| FindNext( SR ) { поиск следующего }

| end {while}

| END;

| { ПРИМЕР ВЫЗОВА }

| BEGIN

| ShowDisk( 'C:\*.*' );

| ReadLn { пауза до нажатия клавиши ввода }

| END.

Рис. 16.9 (окончание)

Функция GetVolume возвращает метку диска, которая была установлена при форматировании или командой MS-DOS LABEL. Метка диска одна, поэтому используется только вызов FindFirst. С помощью FindFirst можно проверять наличие файла в определенном месте.

Последний пример показывает, как написать процедуру показа содержимого каталога (как это делается, например, в системах PC TOOLS или Norton Commander).

16.4.3.2. Функция FSearch( Path : PathStr, DirList: String ) : PathStr. Эта функция возвращает строку типа PathStr, в которой содержится имя и адрес файла на диске. Параметры функции несколько необычны. Первый параметр Path задает имя файла, который нужно отыскать, а второй параметр DirList является списком маршрутов, разделенных точкой с запятой и указывающих, где

- 365 -

именно искать файл. Возможные вызовы функции FSearch могут иметь такой вид:

USES DOS;

VAR S : PathStr;

BEGIN

{Поиск файла в списке каталогов: }

S:=FSearch('MYFILE.DOC', 'C:\;C:\TOOLS;C:\HELP;D:\' );

...

{Поиск файла в одном каталоге: }

S:= FSearch( 'YOURFILE.PAS', 'C:\PASCAL\PAS' );

...

{ Поиск файла в текущем каталоге: }

S:= FSearch( 'OURFILE.PAS' , ' ');

...

END.

Перед тем как начать поиск файла в каталогах списка DirList, функция всегда попытается отыскать его в текущем каталоге. Если файл будет найден, то в переменную S запишется имя файла из параметра Path, в противном случае функция вернет пустую строку. Легко заметить, что параметр DirList аналогичен по синтаксису команде РАТН=... MS-DOS. Поэтому, если программе надо искать файл (не обязательно .СОМ или .ЕХЕ) в общедоступных каталогах, то можно построить вызов

S: = FSearch( 'MyFile.txt', GetEnv( 'PATH' ) );

Функцию FSearch можно, в принципе, использовать для проверки наличия файла в указанном месте. Более того, именно так и надо поступать, если поиск ведется во многих местах. Но для нахождения файла в одном конкретном месте более эффективна процедура, построенная из FindFirst и FindNext.

<p>16.4.4. Работа с атрибутами файлов</p>

Работа с атрибутами файлов проводится при помощи двух процедур:

GetFAttr ( VAR f; VAR Attr : Word );

и

Перейти на страницу:

Поиск

Похожие книги