Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.11.2006, 01:42
zhuk518 zhuk518 вне форума
Прохожий
 
Регистрация: 07.11.2006
Сообщения: 9
Репутация: 10
По умолчанию переход от файла к файлу в одном каталоге

Наверное это глупый вопрос, но у я только начала осваивать Delphi. Мне надо написать поисковую прогу,у меня получилось осуществить поиск нужных слов в одном файле. А как сделать так чтобы поиск происходил во всех файлах, лежащих в одном каталоге? происходил переход от одного файла к другому.
Ответить с цитированием
  #2  
Старый 07.11.2006, 02:22
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Ну если только начала, тогда распишу поподробней.

FindFirst - функция, которая найдет первый файл, удовлетворяющий условию поиска (маске). Функция вернет 0 если файл найден, в противном случае вернет код ошибки.

FindNext - ищет следующий файл, удовлетворяющий условию поиска (маске). Возвращает результат, аналогичный FindFirst.

Пример, который найдет все файлы в директории
Код:
 procedure GetAllFiles( Path: string );
 var
  sRec: TSearchRec;
  isFound: boolean;
 begin
   isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0;
   while isFound do
   begin
      if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then
         if ( sRec.Attr and faDirectory ) <> faDirectory then
            Memo1.Lines.Add( Path + '\' + sRec.Name );
      isFound := FindNext( sRec ) = 0;
   end;
   FindClose( sRec );
 end; 

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   GetAllFiles( 'C:\WINDOWS' );
 end;

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

Код:
 procedure GetAllFiles( Path: string );
 var
  sRec: TSearchRec;  
  isFound: boolean;
 begin
   isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0;
   while isFound do
   begin
      if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then
      begin
         if ( sRec.Attr and faDirectory ) = faDirectory then
            GetAllFiles( Path + '\' + sRec.Name );
         // Memo1.Lines.Add( Path + '\' + sRec.Name );
         // В этом месте ты знаешь, что найден файл,
         // можешь запускать поиск в нем...
      end;
      isFound := FindNext( sRec ) = 0;
   end;
   FindClose( sRec );
 end; 

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   GetAllFiles( 'C:\WINDOWS' );
 end;

В принципе этого достаточно, чтобы решить твою задачу... Ну а появятся вопросы, обращайся.

P.S.
Код писал прямо здесь, так что возможны опечатки...

Последний раз редактировалось Decoding, 09.11.2006 в 00:43.
Ответить с цитированием
  #3  
Старый 08.11.2006, 19:17
zhuk518 zhuk518 вне форума
Прохожий
 
Регистрация: 07.11.2006
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо огромное, Вы меня просто спасли!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter