Как обойти все вложенные подкаталоги?

Рассмотрим метод обхода дерева каталогов с помощью FindFirst и FindNext.

Используя процедуры FindFirst, FindNext перебираем все вхождения в каталог, и проверяем каждое из них - если это каталог, то входим в него и рекурсивно вызываем функцию обхода каталога.

Uses Dos;
     Procedure DirTree(path:string);
     var
       sr:searchrec;
     begin
       If path[length(path)]<>'\' then path:=path+'\';
       findfirst(path+'*.*',AnyFile,sr);
       while (doserror=0) do begin
         if (sr.attr and directory) = directory then begin
           if (sr.name<>'.') and (sr.name<>'..') then
             DirTree(path+sr.name+'\');
         end else begin
           writeln(path+sr.name);
         end;
         findnext(sr);
       end;
     end;
 
     begin
       DirTree(ParamStr(1));
     end.