function asd (a : integer) : int64;
begin
if a>2
then Result := a*asd(a-1)
else Result :=0;
end;
// Данный пример - это вычесление факториала, но его только как пример использовать можно, вследствии определённых причин.
Дерево файлов
Никак не могу понять: как построить дерево файлов.
Например: указал я директорию 'С:\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;
Но в итоге получаю просто список файлов и папок на диске 'С:\'. А как отобразить еще и содержимое папок (и папок которые внутри этих папок). Простите за тавтологию, но я в тупике.
Попробуйте написать рекурсивную процедуру, которой передается путь "откуда начинать искать". Найдя папку она вызывает себя, передав в качестве параметра путь к найденной папке. И лучше наверное воспользоваться не ListBox-ом, а TreeView, тогда в качестве второго параметра можно будет передавать, например, адрес узла, к которому нужно "дорисовывать" найденные объекты (папка/файл). Правда тут может быть подводный камень - если, например, будет оооочень большая вложенность папок, то программа со свистом вылетит, пожаловавшись на переполнение стэка.
Спасибо конечно, но знать бы еще что такое рекурсивная процедура. :confused:
ps почитайте книжки
Цитата: mr_smit
Спасибо конечно, но знать бы еще что такое рекурсивная процедура. :confused:
Ну во первых, рекурсивня процедура - это процедура, которая может вызывать сама себя.
Пример:
Код:
Но по хорошему всё уже написано, смотри вкладку samples кмпонент TShellTreeView или вкладку Win 3.1 кмпонент TDirectoryListBox.