Уроки по Delphi




Урок22. Программный поиск файлов - часть 6


4. Обрабатываем таким же образом все вложенные в этот каталог файлы и каталоги (начинаем новый поиск в обнаруженном каталоге).

5. Если элементов во вложенном каталоге больше нет, то обработка процедуры поиска в нем завершается, и мы выходим из нее. При этом мы оказываемся в том же месте, откуда и вызвали эту процедуру. Но она была вызвана из этой же процедуры. Поэтому программа продолжает свое выполнение дальше с момента возврата.

Таким образом, сколько витков программа наматывает на так называемый клубок, столько витков она и размотает. Программа на выполнении проходит все дерево вложенных каталогов, выполняя один и тот же кусок программного кода! И при этом данные условий поиска не перепутываются, и для каждой уникальной процедуры они сохраняются.

Рассмотрим пример. Создайте новый проект. Для создания отдельной процедуры поиска нам нужно объявить ее в соответствующем разделе (создаем ее вручную, поэтому и самостоятельно объявляем).

В разделе public пишем строку:

procedure FindFile(Dir:String);

А в разделе кода программы, до слова "end." вставляем пустой каркас процедуры

procedure TForm1.FindFile(Dir:String);

begin

end;

На форму вставляем компонент списка ListBox1, Button1, Edit1. Для компонента Edit1 свойство Text устанавливаем в "c:\delphi\". Обратите внимание на последний символ, знак "\", присутствие которого в начальном пути поиска обязательно. Дальше процедура OnClick для кнопки Button1 выглядит следующим образом:

procedure TForm1.Button1Click(Sender: TObject);

begin

ListBox1.Clear; // очистка списка файлов

FindFile(Edit1.Text); // поиск файлов с начальными условиями, заданных в Edit1

end;

Созданная нами вручную процедура поиска:

procedure TForm1.FindFile(Dir:String);

Var SR:TSearchRec;

    FindRes:Integer;

begin

FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);

While FindRes=0 do

   begin

      if ((SR.Attr and faDirectory)=faDirectory) and

      ((SR.Name='.')or(SR.Name='..')) then




Содержание  Назад  Вперед