Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсивный обход дерева каталогов, Как сделать вложенность папок 
:(
    Опции темы
Drizhenko
Дата 3.2.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 13.1.2005

Репутация: нет
Всего: нет



Вот мой алгоритм
Код

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 папке он другие не искал.
PM MAIL   Вверх
Snowy
Дата 3.2.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

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;

PM MAIL   Вверх
Drizhenko
Дата 3.2.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 13.1.2005

Репутация: нет
Всего: нет



Большое спасибо, работает
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.