![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение списка всех подкаталогов на всех логических дисках [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 в цикле