![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем доброе время суток!
Задача такая нужно сделать поиск файла во всех вложенных каталогах например с расширением *.txt Вот что я нарыл: Код:
//В разделе public пишем строку:
procedure FindFile(Dir:String);
//На форму вставляем ListBox1, Button1, Edit1.
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
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then // если найден каталог, то
begin
FindFile(Dir+SR.Name+''); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли
FindRes:=FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск в этом каталоге
Continue; // продолжить цикл
end;
ListBox1.Items.Add(SR.Name);
FindRes:=FindNext(SR);
end;
FindClose(SR);
end; Поиск работает НО при условии исли буду искать любые файлы с любым расширением(*.*). Стоит только поставить *.txt или что то другое поиск производится только в том каталоге который указан(Если указан с:\ то ищет только в корне диска а вложенные папки не шарит ). Помогите Please! Заранее благодарен! Последний раз редактировалось Admin, 01.03.2010 в 10:43. |
|
#2
|
||||
|
||||
|
Делай в процедуре 2 цикла
в первом поиск файлов по маске во втором поиск и рекурсия по всем подкаталогам с общей маской. Кстати у тебя неправильный вход в рекурсию - где "\" ? В самом начале процедуры добавь Код:
Dir := IncludeTrailingPathDelimiter(Dir); |