Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > рекурсивный обход дерева каталогов


Автор: Drizhenko 3.2.2006, 12:10
Вот мой алгоритм
Код

procedure TForm1.FileFind(path: string);
  var sr:Tsearchrec;// Описываем структуру, которую использует для поиска система
  found,i:integer; // найдено или нет
begin
  found:=FindFirst(path + '\*.*', FaAnyfile, sr);
  while (found = 0) do // если хоть что-то найдено
   begin
    if (sr.name <> '.') and (sr.name <> '..') then
    begin // если это не указатели на корневые каталоги, то чтото нашли
      if (sr.attr and FaDirectory) = FaDirectory then
        // ага вот поддиректория - вызываем себя рекурсивно, но с поиском уже в этой директории
        begin
          FileFind(path+'\'+sr.name);
          form1.memo1.lines.append(path+'\'+sr.name);
        end;
      end;
   found:=findnext(sr); // есть ли еще файлы или каталоги
   end;
   FindClose(sr); // поиск закончен - нужно освободить память
end;

Скажите, пожалуйста как добавить сюда вложенность папок. Допустим, чтобы глубже 3 папке он другие не искал.

Автор: Snowy 3.2.2006, 12:13
Код

procedure TForm1.FileFind(path: string; Dept: byte=0);
  var sr:Tsearchrec;// Описываем структуру, которую использует для поиска система    
  found,i:integer; // найдено или нет    
begin    
  found:=FindFirst(path + '\*.*', FaAnyfile, sr);    
  while (found = 0) do // если хоть что-то найдено    
   begin    
    if (sr.name <> '.') and (sr.name <> '..') then    
    begin // если это не указатели на корневые каталоги, то чтото нашли    
      if (sr.attr and FaDirectory) = FaDirectory then    
        // ага вот поддиректория - вызываем себя рекурсивно, но с поиском уже в этой директории    
        begin    
          if Dept <= 3 then FileFind(path+'\'+sr.name, Dept+1);    
          form1.memo1.lines.append(path+'\'+sr.name);    
        end;    
      end;    
   found:=findnext(sr); // есть ли еще файлы или каталоги    
   end;    
   FindClose(sr); // поиск закончен - нужно освободить память    
end;

Автор: Drizhenko 3.2.2006, 12:43
Большое спасибо, работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)