|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Спасибо огромное, Вы меня просто спасли!
|