Q:> 2.4.8 Как осуществить поиск файла по всем директориям?
A:> Hеобходимо воспользоваться процедурами FindFirst/FindNext и
рекурсией. Hапример:
Вот пример самой простенькой програмки. Алгоритм тут весьма
прозрачен, так что без комментариев.
uses Dos;
{
Эта программа ищет все файлы по маске turbo.* в поддиректориях
папки C:\ и выводит на экран их полные имена =)
Основа программы - функция SearchDir её параметры -
fn - маска, Dir -начальная директория.
}
procedure SearchDir(fn, Dir:string);
var
SRec: SearchRec;
ckl:integer;
F:file;
regs:registers;
begin
if dir[length(dir)]<>'\' then Dir:=Dir+'\';
FindFirst(Dir+fn, AnyFile, SRec);
while DosError = 0 do begin
WriteLN(Dir+SRec.Name);
FindNext(SRec);
End;
FindFirst(Dir+'*.*', Directory, SRec);
while DosError = 0 do begin
with SRec do
if (Attr and 16 <> 0 ) and (Name[1]<>'.') then
SearchDir(fn,Dir+Name);
FindNext(SRec);
end;
end;
Begin {program}
SearchDir('turbo.*', 'C:\');
End. {program}