Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Получение списка всех подкаталогов на всех логических дисках   Найти похожие ветки 

 
NeoMaster ©   (2005-08-09 18:27) [0]

Процедуру поиска подкаталогов на одном логическом диске я осилил, а мне нужно осуществить собственно САБЖ. Вот упрощённый код моей процедуры поиска подкаталогов.
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]), то ничего не получается.


 
TUser ©   (2005-08-09 18:32) [1]

GetDriveType в цикле


 
NeoMaster ©   (2005-08-09 18:37) [2]

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


 
IceBeerg ©   (2005-08-09 18:38) [3]

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


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

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


 
NeoMaster ©   (2005-08-09 19:53) [5]

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


 
ANB ©   (2005-08-09 20:45) [6]


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


 
NeoMaster ©   (2005-08-10 22:51) [7]

ok



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
14-1126713394
lookin
2005-09-14 19:56
2005.10.09
Кажется, я уже полностью потерял нить идеи компонентосоздания...


2-1125324977
slaga
2005-08-29 18:16
2005.10.09
Email Client


1-1126849785
john_mag
2005-09-16 09:49
2005.10.09
Rave Reports, QuickReport или MSWord, MSExcel?№1


14-1127211115
SlyFox
2005-09-20 14:11
2005.10.09
UNIX &amp; C: откровения :)


2-1125301044
kyn66
2005-08-29 11:37
2005.10.09
Как изменит фон в ячейке StringGrid ?