Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 08:26   #1
kardinal_kdp
Новичок
Джуниор
 
Регистрация: 01.03.2010
Сообщений: 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! Заранее благодарен!

Последний раз редактировалось Stilet; 01.03.2010 в 08:45.
kardinal_kdp вне форума Ответить с цитированием
Старый 01.03.2010, 08:48   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

в начале процедуры findFile
добавьте showmessage(dir) и поcмотрите что она получает при входе во вложенные
при входе во вложенный не указан \
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.03.2010, 09:34   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Ну и в чем проблема ?
Берем процедуру :
Код:
uses Windows, SysUtils, Classes, Masks
...
...
procedure FindFiles(StartFolder, Mask: string; List: TStrings;  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
                FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then List.Add(StartFolder + Name);
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;
И используем ее :
Код:
FindFiles('C:\Program Files\', '*.txt', Memo1.Lines, true);
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Switch вложенный в бесконечный цикл coper Общие вопросы C/C++ 2 16.11.2009 02:31
оконная процедура и вложенный switch Пепел Феникса Общие вопросы C/C++ 3 09.09.2009 18:56
Поиск файлов ---FISHER--- Общие вопросы Delphi 35 18.08.2009 13:19
не работает вложенный catch jorjik Общие вопросы C/C++ 5 13.07.2008 22:37