Главная страница
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.02 c
14-81465
mifi
2002-06-28 09:27
2002.07.25
Openfile в скрипте


8-81386
Злой_Гном
2002-03-15 14:50
2002.07.25
Работа с AVI файлами


14-81460
Mike B.
2002-06-27 14:29
2002.07.25
Груша


3-81191
Дундук
2002-07-05 05:49
2002.07.25
Обработка клавиши TAB в DBGrid


14-81468
Александр
2002-06-26 22:55
2002.07.25
Опрос