Главная страница
    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.034 c
4-1087494991
miwa
2004-06-17 21:56
2004.08.01
SHFileOperation - Cannot read from the source file or disk


1-1089792591
UnDISCOvery
2004-07-14 12:09
2004.08.01
MSMQ 3.0 - Delphi 7. Где взять информацию ?


3-1089098825
Iddqd
2004-07-06 11:27
2004.08.01
Дни недели


14-1089960179
Nikon777777
2004-07-16 10:42
2004.08.01
Реально ли написать программку?


1-1090243759
ruslan
2004-07-19 17:29
2004.08.01
Forma poyavilos plavno





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