Вниз
Скачать: CL | DM;

Программный поиск файлов   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-1090306713
joy
2004-07-20 10:58
2004.08.01
Шрифты


14-1089964830
Dmitriy O.
2004-07-16 12:00
2004.08.01
Референдум


14-1089608737
Baron
2004-07-12 09:05
2004.08.01
Пиратские фильмы


4-1087805509
besen-ok
2004-06-21 12:11
2004.08.01
Можно ли на терминальном сервере в определенной сесиси запустить


14-1089889664
Koala
2004-07-15 15:07
2004.08.01
вопрос к профессиналам, проблема с жестким диском




   Наверх