Форум: "WinAPI";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Вниз
Получение списка всех подкаталогов на всех логических дисках Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.015 c