Главная страница
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.043 c
4-1123700179
Grief
2005-08-10 22:56
2005.10.09
Процессы


6-1119421096
Магнум
2005-06-22 10:18
2005.10.09
Выкачать файл (http)


14-1126951227
Piter
2005-09-17 14:00
2005.10.09
Быстродействие потоков


1-1126946533
testerr
2005-09-17 12:42
2005.10.09
скопировать экран TWebBrower


3-1124880664
Слава-АБС
2005-08-24 14:51
2005.10.09
Открытие Dbf через ADO