Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: 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 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
1-1090210445
Hogo
2004-07-19 08:14
2004.08.01
Как в MaskEdit создать маску для ввода IP?


3-1089199879
Андрей
2004-07-07 15:31
2004.08.01
Edit в DBGrid, который связан с Query


14-1089574147
Empleado
2004-07-11 23:29
2004.08.01
кАковый перевод иноземных фильмов


1-1090243039
Natalie_Q
2004-07-19 17:17
2004.08.01
Из Delphi в HTML


1-1090406223
Dm_S
2004-07-21 14:37
2004.08.01
xl_1:=CreateOLEObject( Excel.Application в консольном приложении