Можно попроще сделать, ибо рекурсия рулит. Параметры : Path - где искать, можно указывать диск (С:, D:...), SearchMask - маска, для поиска определенного файла можно написать тут имя файла, Memo - обычный мемо редактор, куда будут выводится результаты поиска.
Код:
procedure Find(const Path, SearchMask : String; var Memo : TMemo);
var
fs : TSearchRec;
i : Integer;
begin
Application.ProcessMessages;
i := FindFirst(Path + '\' + SearchMask, faAnyFile, fs);
while i = 0 do begin
Memo1.Lines.Add(path + '\' + fs.Name);
i := FindNext(fs);
end;
i := FindFirst(Path + '\*', faDirectory or faAnyFile, fs);
while i = 0 do begin
if (fs.Name <> '.') and (fs.Name <> '..') and
((fs.Attr and faDirectory) <> 0) then
Find(Path + '\' + fs.Name, SearchMask, Memo);
i := FindNext(fs);
end;
FindClose(fs);
end;