Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

поиск файлов


Nagano ©   (2006-08-01 12:53:00) 

Как можно найти все файлы с определенным расширением в определенной папке и всех ее подпапках?


StriderMan   (2006-08-01 18:21:00) [1]


>   retval := FindFirst( path+mask, faAnyFile, SRec );
>      While retval = 0 Do Begin
>        If (SRec.Attr and (faDirectory or faVolumeID)) =
> 0 Then
>        ListBox1.items.Add(path+srec.name);
>        retval := FindNext( SRec

здесь явно можно обойтись без retval


Ivolg   (2006-08-01 18:15:00) [2]

Вот неплохой алгоритм поиска:

Procedure TForm1.FindRecursive( Const path: String; Const mask: String);
Var
fullpath: String;
 Function Recurse( Var path: String; Const mask: String ): Boolean;
   Var
     SRec: TSearchRec;
     retval: Integer;
     oldlen: Integer;
   Begin
     Recurse := True;
     oldlen := Length( path );
     retval := FindFirst( path+mask, faAnyFile, SRec );
     While retval = 0 Do Begin
       If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then
       ListBox1.items.Add(path+srec.name);
       retval := FindNext( SRec );
     End;
     FindClose( SRec );
     If not Result Then Exit;
     retval := FindFirst( path+'*.*', faDirectory, SRec );
     While retval = 0 Do Begin
       If (SRec.Attr and faDirectory) <> 0 Then
         If (SRec.Name <> '.') and (SRec.Name <> '..') Then Begin
           path := path + SRec.Name + '\';
           If not Recurse( path, mask ) Then Begin
     
             Result := False;
             Break;
           End;
           Delete( path, oldlen+1, 255 );
         End;
       retval := FindNext( SRec );
     End;
     FindClose( SRec );
   End; { Recurse }
 Begin
   If path = '' Then
     GetDir(0, fullpath)
   Else
     fullpath := path;
   If fullpath[Length(fullpath)] <> '\' Then
     fullpath := fullpath + '\';
   If mask = '' Then
     Recurse( fullpath, '*.*' )
   Else
     Recurse( fullpath, mask );
 End;


Darvin   (2006-08-01 17:16:00) [3]

Джо ©   (01.08.06 12:54) [1] + рекурсия по вложенным папкам


Сергей М.   (2006-08-01 13:05:00) [4]

см. TOpenDialog + св-во Filter + событие OnIncludeItem


Джо   (2006-08-01 12:54:00) [5]

FindFirst, FindNext, FindClose. Поищи по форуму. Тут чуть ли не каждую неделю готовый код выкладывают.


Наверх

Титульная страница Поиск, карта сайта Написать письмо