Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение списка всех подкаталогов на всех логических дисках [D7, WinXP]


NeoMaster ©   (2005-08-09 18:27:00) 

Процедуру поиска подкаталогов на одном логическом диске я осилил, а мне нужно осуществить собственно САБЖ. Вот упрощённый код моей процедуры поиска подкаталогов.
Procedure WatchSubDirectoies(CurrentFolder: String);
Var
 SearchRec: TSearchRec;
Begin
 If CurrentFolder <> '' then
 CurrentFolder:= CorrectDirectoryName(CurrentFolder);
try
 If FindFirst(CurrentFolder + '*.*', faDirectory, SearchRec) = 0 then
   repeat
   if ((SearchRec.Attr and faDirectory) = faDirectory) and not ((SearchRec.Name = '.') or (SearchRec.Name = '..')) then
       Begin
         WatchSubDirectoies(CurrentFolder + SearchRec.name);
         Settings.DFW.Add(CurrentFolder + SearchRec.name + '\');
       End;
   until
     FindNext(SearchRec) <> 0;
finally
     FindClose(SearchRec);
end;
End;

Т.е. есть список каталогов, которые нужно просмотреть Settings.DFW: TStrings. При вызове этой процедуры я передаю ей в качетсве параметра Первое значение списка Settings.DFW. Найденные подкаталоги записываются в этот же список. Пока всё работает. Из процедуры видно, что во время выполнения она сама себя ещё вызывает. Так что если в список Settings.DFW записать два начальных каталога и вызывать таким способом:
For i:=0 To Settings.DFW.Count - 1 do WatchSubDirectoies(Settings.DFW.Strings[i]), то ничего не получается.


NeoMaster   (2005-08-10 22:51:00) [1]

ok


ANB   (2005-08-09 20:45:00) [2]


> NeoMaster ©   (09.08.05 19:53) [5]
- я могу : Сесть и подумать над предыдущими постами.
Могу кинуть пример поиска по каталогам всех дисков. Переделывать под себя будешь сам.


NeoMaster   (2005-08-09 19:53:00) [3]

>Anatoly Podgoretsky:
Фактически вызываемая в цикле процедура завершается, а вызывается она из другого места уже вне цикла и цикл продолжает свою работу. Одним словом без цикла работает, но стоит вызвать несколько раз эту процедуру - не работает. Может предложите свой вариант получения списка всех подкаталогов всех жёстких дисков.


Anatoly Podgoretsky   (2005-08-09 18:50:00) [4]

Пока не закончится первый вызов, цикл не перейдет к следующей иттерации.


IceBeerg   (2005-08-09 18:38:00) [5]

Запуздырь вызов процедуры WatchSubDirectoies(... в другую процедуру, где введи временный объект и по мере обхода дисков добавляй к нему резултат возвращаемый твоей процедурой...


NeoMaster   (2005-08-09 18:37:00) [6]

Тут дело в том, что процедура вызывает сама себя. И если вызывать ей в цикле, то процедура может ещё выполнятся, а её уже снова вызывают. Ну и естественно ошибка и ничего не работает(я пишу сервис). Посмотрите код процедуры и код её запуска в цикле. Может поможите его доделать или переделать.


TUser   (2005-08-09 18:32:00) [7]

GetDriveType в цикле


Наверх

Титульная страница Поиск, карта сайта Написать письмо