Delphi
Общие вопросы

Поиск файлов по маске

Опубликовано: 28 июл 06
Рейтинг:

Автор: Ramin
Прислал: Ramin

Procedure 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
        Application.ProcessMessages;
        If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then
         Form1.ListBox1.items.Add(path+srec.name); 
         Form1.Caption:='Found '+IntToStr(Form1.ListBox1.items.Count)+' files...';

        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;


procedure TForm1.Button1Click(Sender: TObject);
begin
  FindRecursive('c:\program files\Borland\','*.*');
end;

Комментарии


  • Топик нужный. Только немного не понятно: что делает второй блок в функции после If not Result...



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Delphi / Общие вопросы / Поиск файлов по маске