Главная страница
    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.47 MB
Время: 0.045 c
1-1089903571
Виталий
2004-07-15 18:59
2004.08.01
Процедура


6-1086197510
Игорь
2004-06-02 21:31
2004.08.01
Компонеты FastNet


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


1-1090392857
Дмитрий 2004
2004-07-21 10:54
2004.08.01
как в Image можно очистить рисунок


3-1089133145
yaJohn
2004-07-06 20:59
2004.08.01
разграничить права доступа к отдельным записям по группам юзеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский