Страница 1 из 1
Содаём список папок... Помогите плз!
Добавлено: 31 мар 2005, 14:03
OTELLO
Всем привет! Кароче такая проблема:
нужно, зная корневой каталог, создать список всех папок(всех вложенных и вложенных во вложенные ну и т.д.) входящих в него и записать его в TStrings. Ну типа функция
GetDirs(ARoot:STRING;AList:TStrings), а примерный вызов такой GetDirs('D:\Primer1',ListBox1.Items);. Я пробовал обход дерева, (и обычный и рекурсию), но почему-то мне не хватает мозгов довести до ума =)). Кароче ни как не сделать.
Может кто делал или кто может написать такой код- подскажите плиз! Заранее спасиба!..
Добавлено: 01 апр 2005, 11:05
Игорь Акопян
имхо, гораздо продуктивнее привести свой вариант а народ будет ошибки искать, "буде таковые имеются" (с)
Добавлено: 01 апр 2005, 17:19
OTELLO
Кароче суть в том, что я не писал код. Алгоритмы пробовал на бумажке.А проблема- мне просто не написать функцию обхода дерева. Хотябы приведите просто вариант обхода дерева, любой, прямой или обратный. Рекурсивный или нет (лучше рекурсивный, я его лучше понимаю =))) ). ПЛИЗЗЗЗ...
Добавлено: 02 апр 2005, 22:58
Хыиуду
Если описывать алгоритм словесно, тогда так:
findfirst(папка)
Если не найдено - выход
записать имя папки в TStrings
рекурсивно вызвать getdirs, указав в качестве ARoot только что найденную папку
пока в заданной папке можно найти другие:
находим следующую папку
записать имя папки в TStrings
рекурсивно вызвать getdirs, указав в качестве ARoot только что найденную папку
Добавлено: 03 апр 2005, 06:39
Dyt
А просто Dir "путь у каталогу" /S >spisok.txt не пройдет?
Добавлено: 03 апр 2005, 21:50
OTELLO
Dyt что ты имеешь ввиду? Мне всё равно куда писать список, главное чтоб он формировался...
Добавлено: 04 апр 2005, 08:49
LAngel
Код: Выделить всё
procedure GetDirs(ARoot:STRING;AList:TStrings);
Var
F : TSearchRec;
begin
if ARoot[Length(ARoot)] <> '\' then ARoot := ARoot + '\';
if FindFirst(ARoot + '*.*', faDirectory, F) = 0 then
repeat
if (F.Attr and faDirectory) = F.Attr then
if not ((F.Name = '.') or (F.Name = '..')) then
begin
AList.Add(F.Name);
GetDirs(ARoot + F.Name, AList);
end;
until FindNext(F) <> 0;
FindClose(F);
end;
Добавлено: 04 апр 2005, 17:48
Dyt
Имею ввиду команду DOS Dir - самый простой способ сделать список файлов. Вызывать ее наверно через WinExec.
т.е команда выглядит так dir c:\windows /s /b >c:\list.txt
по ней будет составлен список файлов в директории c:\windows в т.ч. во всех подкаталогах и помещен этот список будет в файл c:\list.txt
Добавлено: 05 апр 2005, 17:20
OTELLO
LAngel спасибо ОГРОМНОЕ- это то, что надо!!! Спасибо!!!
Dyt кстати я об этом и не подумал, но тоже спасибо и, действительно, работает =))
Добавлено: 06 апр 2005, 15:36
Romeo
LAngel, второй параметр в описанной функии
GetDirs лишний. Зачем лищний раз забивать стэк всякой ненужно всячиной. Достаточно
AList:TStrings объявить снаружи функции.
Dyt, Точнее так:
Требовался ведь список директорий, а не всего подряд.