Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.25;
Скачать: CL | DM;

Вниз

Поиск директорий....   Найти похожие ветки 

 
garry ©   (2002-07-15 12:49) [0]

Уважаемые, не подскажите как обыграть поиск файлов по нескольким вложенным директориям. Т.е. существует директория в которой ещё несколько директорий, во всех этих директориях необходимо найти файлы удовлетворяющие определённым требованиям и выполнить над этими файлами какое-то действие. Своего умишки хватает только на поиск в текущей директории...


 
Виктор Щербаков ©   (2002-07-15 12:57) [1]

Рекурсией делай.
Т.е. пусть процедура поиска вызывает саму себя для каждой вложенной директории.


 
still ©   (2002-07-15 12:59) [2]

Обычно такие вещи делаются рекурсивными процедурами.
Т.е. у процедуры входной параметр - имя директории, в которой надо искать. Если при поиске находишь директорию, то вызываешь ту же процедуру с другим параметром.
Алгоритм примерно такой:

procedure Find(Dir: string);
var
файл
begin
while not НайтиНЕУдалось(Dir)
begin
файл := НайтиСледФайл(Dir);
if IsDirectory(файл) then Find(Dir+файл)
else ОперацияСФайлом(файл);
end;
end;


Советую почитать книжки на эту тему.



 
delta ©   (2002-07-15 13:17) [3]

Вот ещё рабочий кусок кода. Ищет все файли на D с расширением р65
procedure Find (patch: string; Dirs: TStringList; Files: TStringList);
var SearchRec: TSearchRec;
begin
FindFirst(patch + "*.*", faAnyFile, SearchRec);
if (SearchRec.Attr=faDirectory) and (Copy (SearchRec.Name,1,1)<>".") then
Dirs.Add(patch + SearchRec.Name+"\")
else
if (
((ExtractFileExt(SearchRec.Name))=".p65") Or
((ExtractFileExt(SearchRec.Name))=".P65") )
then
Files.Add(patch + SearchRec.Name);


While FindNext(SearchRec)=0 do
if (SearchRec.Attr=faDirectory) and (Copy (SearchRec.Name,1,1)<>".") then
Dirs.Add(patch + SearchRec.Name+"\")
else
if (
//Copy (SearchRec.Name,1,1)<>"."
((ExtractFileExt(SearchRec.Name))=".p65") Or
((ExtractFileExt(SearchRec.Name))=".P65") )
then
Files.Add(patch + SearchRec.Name);
FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var d:integer;
Dirs:TStringList;
Files:TStringList;
begin
Dirs:= TStringList.Create;
Files:= TStringList.Create;
try
Find ("D:\",Dirs, Files);
d:=0;
While Dirs.Count<>d do begin
Find(Dirs[d],Dirs, Files);
d:=d+1;
end;
For d := 0 To Files.Count - 1 Do
ListBox1.items.add (IntToStr(d+1)+" " + Files [d]);
finally
Dirs.Free;
Files.Free;
label1.Caption:= ("Найдено "+ IntToStr (ListBox1.Count) + " файла(ов)");
end;
end;




Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.014 c
7-81489
Dmitry V. Averuanov
2002-04-02 15:01
2002.07.25
Как создать каталог ?


1-81319
nick_chay
2002-07-10 16:03
2002.07.25
Edit в рамке


3-81154
Дундук
2002-07-04 08:23
2002.07.25
Переместить указатель


1-81220
Sachem
2002-07-14 11:03
2002.07.25
Как узнать от какого компанента произошло событие


14-81445
svet
2002-06-27 15:19
2002.07.25
Иконки