Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизПрограммный поиск файлов Найти похожие ветки
← →
Gleb (2004-07-15 04:21) [0]Подскажите, как можно произвести поиск файлов, который бы ковырял по всему дереву каталогов, начиная от заданного каталога, а не в только в нем?
← →
ЮЮ © (2004-07-15 04:29) [1]При нахождении каталога рекурсивно вызывать эту же функцию "ковыряния в каталоге"
← →
Gleb (2004-07-15 04:32) [2]Если не сложно, объясни, что значит рекурсивно. Я начинающий самоучка :).
← →
KADAN © (2004-07-15 04:33) [3]делаешь поиск нужных файликов в корне,
затем поиск каталогов в корне,
теперь у тебя есть список каталогов корня,
с каждым каталогом проделываешь то же самое.
рекомендую сделать процедурку рекурсивной, ИМХО удобнее будет...
← →
KADAN © (2004-07-15 04:35) [4]рекурсивно значит - напиши функцию поиска файлов, одним из передаваемых параметров которой является каталог для поиска.
← →
ЮЮ © (2004-07-15 04:39) [5]function KовыряниеBкаталоге(PathName: TFileName);
var
fileName: string;
begin
...
if <fileName есть имя каталога> then
KовыряниеBкаталоге(fileName);
...
end;
← →
Gleb (2004-07-15 04:40) [6]Да мне тоже прийшла в голову такая мысля, но тогда прийдеться сохранять на каждом уровне переменную sr: TSearchRec, чтобы вылезая из каталога в котором я порылся, функция знала в какой следующий каталог нырнуть, и это нужно сделать на каждом уровне. А я хотел попроще... Но все равно, спасибо за ответы.
← →
ЮЮ © (2004-07-15 04:44) [7]>и это нужно сделать на каждом уровне
её надо поместиь в локальные переменные функции KовыряниеBкаталоге и тогда "на каждом уровне" она т будет своя
← →
Gleb (2004-07-15 04:48) [8]Дело в том, что переменная будет принимать условия поиска каждого уровня, но мне еще нужно подняться по дереву каталогов вверх. Тут уже проситься динамический массив of TSearchRec.
← →
KADAN © (2004-07-15 04:52) [9]неа, хватит СтрингЛиста. посмотри как сделан TDirectoryListBox на вкладке Win 3.1
← →
Sergey Kaminski (2004-07-15 05:03) [10]
procedure FindRecursively (RootDir, Mask: string; Files: TStrings);
var
SearchRec: TSearchRec;
begin
try
// нужно обязательно искать не по заданной маске,
// а все файлы(директории), чтобы находить директории
// по маске отсеим потом
if FindFirst (RootDir+PathDelim +"*.*",faAnyFile,SearchRec)=0 then
begin
repeat
// это нам не нужно
if (SearchRec.Name = ".") or (SearchRec.Name = "..") then
Continue;
// если это директория...
if SearchRec.Attr and faDirectory = faDirectory then
begin
// ... вызываем рекурсивно с этого места дерева
FindRecursively(RootDir+PathDelim+SearchRec.Name,Mask,Files);
end
else
// иначе просто заносим имя файла в список
// если совпадает с заданной маской
if MatchesMask (SearchRec.Name,Mask) then
Files.Add(RootDir+PathDelim+SearchRec.Name);
until FindNext(SearchRec)<>0;
end;
finally
FindClose (SearchRec);
end;
end;
Пример использования:
var
Files: TStrings;
begin
Files := TStringList.Create;
try
FindRecursively("d:\Delphi6\Projects","*.pas",Files);
ShowMessage (Files.Text);
finally
Files.Free;
end;
end;
Да, чуть не забыл:uses Masks
;
← →
Sergey Kaminski (2004-07-15 05:05) [11]Тут уже проситься динамический массив of TSearchRec
%-\
Не нужно так усложнять :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c