Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1087916842
NOX
2004-06-22 19:07
2004.08.01
как вытащить иконку из exe-файла?


1-1089978524
faost
2004-07-16 15:48
2004.08.01
Есть ли компоненты, реализующие раскрывающееся меню в WinXP?


4-1087557999
vertal
2004-06-18 15:26
2004.08.01
Использование CreateThread в Delphi


3-1089292205
Sectey
2004-07-08 17:10
2004.08.01
Почему не удаетмя открыть таблицу MS-SQL?


1-1090302808
[BAD]Angel
2004-07-20 09:53
2004.08.01
Как побороть EXCEPTION?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский