Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужен алгоритм.


cinol ©   (2006-06-06 06:43:00) 

Здравствуйте.
Нужно создать дерево папок (как в проводнике) произвольной "вложенности", относительно заданной.
Вот чет не могу сообразить как это сделать.


Zeqfreed   (2006-06-07 09:36:00) [1]


> а если в подкаталогах есть еще подкаталоги? Глубина вложенности
> не определена.

И их тоже обойдет, и все-все-все обойдет.


cinol   (2006-06-07 09:31:00) [2]


> http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=1015254946&n=19


Спасибо, вечером попробую переписать на пхп.


> обойдет все подкаталоги указанной директории.

а если в подкаталогах есть еще подкаталоги? Глубина вложенности не определена.


Zeqfreed   (2006-06-07 09:07:00) [3]

Алгоритм, собственно, такой: функция на входе получает имя директории, получает список файлов и папок в ней и вызывает саму себя для всех каталогов кроме «.» (текущий каталог) и «..» (каталог уровнем выше). Таким образом рекурсивно она обойдет все подкаталоги указанной директории.


MBo   (2006-06-07 08:43:00) [4]

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=1015254946&n=19


cinol   (2006-06-07 07:51:00) [5]

function readdir($dir)//считывает все файлы в папке в массив $files
///////////////////////////////////////////////////////////////////////////////////////////////
function isdir($files)
foreach ($files as $value)    //$files массив возвращенный функ. readdir
          {if(is_dir($value))   //если папка
          {readdir($value);   //считаем файлы в ней
           isdir($value);}      //<-это и есть рекурсия?
           }

в таком случае дерево папок получается не правильное.
если в директории не одна папка.
находит первую папку, в ней то-же первую, в ней ...и т.д.
второй, третьеи и др. папок нет.

Не хватает фантазии, как сделать правильно?,Есть какие нибудь мысли?


Loginov Dmitry   (2006-06-06 11:19:00) [6]

Крайне полезный пример рекурсии :)

function A(I: Integer): Integer;
begin
 Inc(I);
 Result := I;
 if I > 100 then
   Exit
 else
   Result := A(I);
end;


cinol   (2006-06-06 10:59:00) [7]


> Это когда функция сама себя вызывает неопределенное число
> раз.

Да наверно. Как это делается? Можно простенький пример?


Loginov Dmitry   (2006-06-06 10:33:00) [8]

Это когда функция сама себя вызывает неопределенное число раз.


cinol   (2006-06-06 09:52:00) [9]


> Рекурсия?

не знаю, что это такое?
з.ы. я новичек.


Loginov Dmitry   (2006-06-06 08:56:00) [10]

Рекурсия?


cinol   (2006-06-06 07:35:00) [11]

из того что нашел в сети мне ничто не нравится.


cinol   (2006-06-06 07:33:00) [12]

To PZ
Дело в том что это не в проге будет использоваться, это на пхп будет карта сайта.
Поэтому я прошу алгоритм.Готовые компоненты мне не подойдут.


PZ   (2006-06-06 07:11:00) [13]

ShellTreeView


Наверх

Титульная страница Поиск, карта сайта Написать письмо