Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Дерево файлов

9.0K
14 апреля 2007 года
mr_smit
64 / / 03.12.2006
Читал, читал умные книжки, но бесполезно. Поэтому взываю к помощи.
Никак не могу понять: как построить дерево файлов.
Например: указал я директорию 'С:\Downloads' и после этого TreeView (или Listbox) заполняется списком папок и вложенных в них файлов:

music
|---Kino
| |---Gruppa krovi.mp3
| |---Krasno-zheltie dni.mp3
| |---Kukushka.mp3
| |---video
| |---Gruppa krovi.avi (Пример)
| |---Krasno-zheltie dni.avi
| |---Kukushka.avi
|
|---Red Hot Chili Peppers
| |---Snow
|
software
|---aimp_full.exe
Pricols
|---смешные
| |---очень смешные
| |---очень очень смешные
| |---очень очень смешные
| |---очень очень смешные


Ну и так далее. Ума не приложу. ???

Вот что я смог сделать:

procedure TForm1.Button1Click(Sender: TObject);
var F: TSearchRec;
begin
if FindFirst('C:\' + '*.*', faAnyFile, F)=0 then
begin
repeat
if (F.Attr and faAnyFile <> 0) and (F.Name <> '.') and (F.Name <> '..') then
ListBox1.Items.Add('C:\'+F.name)
until FindNext(F)<>0;
end;
FindClose(F);
end;

Но в итоге получаю просто список файлов и папок на диске 'С:\'. А как отобразить еще и содержимое папок (и папок которые внутри этих папок). Простите за тавтологию, но я в тупике.
7.0K
14 апреля 2007 года
Rusd
88 / / 26.08.2006
Попробуйте написать рекурсивную процедуру, которой передается путь "откуда начинать искать". Найдя папку она вызывает себя, передав в качестве параметра путь к найденной папке. И лучше наверное воспользоваться не ListBox-ом, а TreeView, тогда в качестве второго параметра можно будет передавать, например, адрес узла, к которому нужно "дорисовывать" найденные объекты (папка/файл). Правда тут может быть подводный камень - если, например, будет оооочень большая вложенность папок, то программа со свистом вылетит, пожаловавшись на переполнение стэка.
9.0K
15 апреля 2007 года
mr_smit
64 / / 03.12.2006
Спасибо конечно, но знать бы еще что такое рекурсивная процедура. :confused:
622
15 апреля 2007 года
nilbog
507 / / 19.12.2006
процедура которая вызывает себя :)
ps почитайте книжки
286
16 апреля 2007 года
misha_turist
572 / / 28.11.2005
Цитата: mr_smit
Спасибо конечно, но знать бы еще что такое рекурсивная процедура. :confused:



Ну во первых, рекурсивня процедура - это процедура, которая может вызывать сама себя.
Пример:

 
Код:
function asd (a : integer) : int64;
begin
 if a>2
 then Result := a*asd(a-1)
 else Result :=0;
end;
// Данный пример - это вычесление факториала, но его только как пример использовать можно, вследствии определённых причин.


Но по хорошему всё уже написано, смотри вкладку samples кмпонент TShellTreeView или вкладку Win 3.1 кмпонент TDirectoryListBox.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог