![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Наверное это глупый вопрос, но у я только начала осваивать Delphi. Мне надо написать поисковую прогу,у меня получилось осуществить поиск нужных слов в одном файле. А как сделать так чтобы поиск происходил во всех файлах, лежащих в одном каталоге? происходил переход от одного файла к другому.
|
|
#2
|
||||
|
||||
|
Ну если только начала, тогда распишу поподробней.
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
|
|||
|
|||
|
Спасибо огромное, Вы меня просто спасли!
|