Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм FileTree


Автор: XPurple 15.2.2007, 13:39
Не могу понять алгоритма построения FileTree (дерева файлов), начиная от корня и ниже.
Вывести "Гладкий" список файлов, используя рекурсивный метод, получается.
Но дальше затык.
Не могу понять: как привязать глубину хранения файла для передаваемой в качестве значения рекурсивной функции.

Требуется построить что-типа этого

--->DIR1-
               |----
               |----
--->DIR2-
               |----DIR3-
               |              |----DIR4
               |
               |----DIR5-
                              |---File1

--->DIR6

и т.д.

Автор: Aloha 15.2.2007, 22:51
XPurple

Есть такой TreeView control, который отображает список узлов (Node Objects) в иерархическом виде. Глянь в сторону объектной модели Node, возможно это подскажет решение проблемы.
Узлы Node имеют в частности такие свойства:

Root - это свойство возвращает ссылку на корневой узел;
Parent - это свойство возвращает ссылку на родительский узел данного узла;
Child - это свойство возвращает ссылку на первый дочерний узел данного узла;
Children - это свойство возвращает количество дочерних узлов данного узла;

У каждого родительского узла понятное дело может быть несколько дочерних узлов (а может и не быть). Следующие свойства определяют взаиморасположение дочерних узлов некоего родительского узла:

Next - это свойство возвращает ссылку на следующий (сестринский) узел;
Previous - это свойство возвращает ссылку на предыдущий (сестринский) узел;
FirstSibling - это свойство возвращает ссылку на первый (сестринский) узел;
LastSibling - это свойство возвращает ссылку на последний (сестринский) узел.

Автор: XPurple 16.2.2007, 08:15
Хорошо.
Посмотрим

Автор: Alexandr87 16.2.2007, 08:35
Добавляете дополнительный параметр в вашу рекурсивную функцию - глубина.
При вызове очередном рекурсивном вызове (передаете в функцию значение данного параметра, увеличенное на единицу),  в зависимости от этого параметра, выводите необходимое число пробелов перед вашим  |----

Автор: XPurple 19.2.2007, 08:15
Не все так просто.

Автор: Alexandr87 19.2.2007, 09:13
Цитата(XPurple @  19.2.2007,  11:15 Найти цитируемый пост)
Не все так просто. 

лаконично smile
В чём проблемма?

Автор: XPurple 19.2.2007, 12:13
проблема в том, что я не знаю, как определить степень вложенности относительно корня.

Например:


Root

         1
               2
                    3
                         4
               2


Как определить степень вложенности относительно корня последней директории ?
1,2,3,4 это степени вложенности директорий


В таком виде пока выводится:

Код

ARJ-ALL
ARJ-VER260
     |———>agents.doc
     |———>arj$disp.exe
     |———>arj.doc
     |———>arj.exe
     |———>arjback.bat
     |———>arjcrypt.com
     |———>arjdisp.bat
     |———>arjdisp.doc
     |———>arjincr.bat
     |———>arjrest.bat
     |———>arjsort.bat
     |———>arjsort.com
     |———>arjsort.doc
     |———>arj_bbs.doc
     |———>credit.crd
     |———>errors.doc
     |———>file_id.diz
     |———>intro.doc
     |———>license.doc
     |———>orderfrm.doc
     |———>perechen.arj
     |———>peresh~2.doc
     |———>readme.doc
     |———>rearj.cfg
     |———>rearj.doc
     |———>rearj.exe
     |———>rearjall.bat
     |———>register.exe
     |———>sysop.doc
     |———>technote.doc
     |———>testarj.bat
     |———>update.doc
     |———>whatsnew.doc
     |———>why_arj.doc
ARJCRACK
     |———>arjcrack.exe
     |———>arjcrack.exe
WIN
WINZIP70
     |———>deviant.nfo
     |———>winzip70.exe
     |———>deviant.nfo
     |———>winzip70.exe
     |———>deviant.nfo
     |———>winzip70.exe


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