Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Имена каталогов и подкаталогов.  (Прочитано 6895 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
MS
Помогающий

ru
Offline Offline
Пол: Мужской

« : 08-10-2007 05:50 » 

Подскажите. Выбираю каталог с помощь ShellComboBox1. Мне нужно найти по порядку имена всех подкаталогов причем  и подкаталогов в подкаталогах, т.е. любой глубины. Спасибо.
Записан

Ничто так не ограничивает полёт мысли программиста, как компилятор
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-10-2007 06:25 » 

Рекурсия поможет!
Ф-ия что-то типа:
0. на входе - путь к директории для сканирования.
1. открыть дилекторию
2. просканить по порядку
3. на каждую директорию: добавить в выходной список и вызвать ф-ию рекурсивно, с новыми параметрами.
4. закрыть директорию.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MS
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-10-2007 03:40 » 

Вот нашел фнкцию:
Цитата
procedure FindIt(path, ext: string; aListBox: TListBox;
  spaces: boolean = false; level: integer = 0);
var
  SR: TSearchRec;
  s: string;
  i: integer;
begin
if FindFirst(Path+Ext, faAnyFile, SR) = 0 then
  begin
    repeat
    if (SR.Attr = faDirectory) then
      if (SR.Name <> '.') and (SR.Name <> '..') then
        begin
        s:='';
        for i:=0 to level-1 do
          s:=s+'    ';
        aListBox.Items.Add(s+SR.Name);
        Inc(level);
        if spaces then
          FindIt(Path+sr.Name+'\',ext,aListBox,true,level)
        else
          FindIt(Path+sr.Name+'\',ext,aListBox);
        Dec(level);
        end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;
Вот ее запуск:
Цитата
FindIt(ExtractFilePath(form1.SXSkinLabel4.Caption+'\'),'*.*', ListBox1);
FindIt(ExtractFilePath(form1.SXSkinLabel4.Caption)+'\','*.*', ListBox1,true);

У меня в form1.SXSkinLabel4.Caption путь в каталог. пример D:\Pic\ Но у меня в listbox выводиться не только выбранная папка с подпапками, но и все подпапки на D, помогите, а то нервы уже здают.
Записан

Ничто так не ограничивает полёт мысли программиста, как компилятор
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-10-2007 06:22 » 

MS, так отладчиком встань в начало ф-ии и посмотри, что в нее попадает.

Кстати, не знаю как в дельфях, а по сишному - бекслеши в константах надо удваивать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #4 : 10-10-2007 07:04 » 

Цитата
Кстати, не знаю как в дельфях, а по сишному - бекслеши в константах надо удваивать.
В дельфях не надо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines