Arquivos - localizando com recursividade em pastas

Top  Previous  Next

/* este foi alterado por Flavio Jr em 2-1-2001

 

procedure SubDirSearch(var Lista: TStringList; Mascara: string; IncluirPasta: Boolean = True);

  procedure GetAllFiles(const Mask: string);

  var

    Search: TSearchRec;

    Verz  : string;

    Such  : string;

  begin

    Such := ExtractFileName( Mask );

    Verz := IncludeTrailingBackslash(ExtractFilePath( Mask ));

 

    if FindFirst( Mask, $23, Search) = 0 then // All files

    repeat

      if IncluirPasta then Lista.Add(Verz + Search.Name) else Lista.Add(Search.Name);

    until FindNext(Search) <> 0;

 

    // Subdirectories

    if FindFirst(Verz + '*.*', faDirectory, Search) = 0 then

    repeat

      if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then

        GetAllFiles(Verz + Search.Name + '\' + Such);

    until FindNext(Search) <> 0;

    FindClose(Search);

  end;

begin

  Screen.Cursor := crHourGlass;

  Lista.Clear;

  GetAllFiles( Mascara );

  Screen.Cursor := crDefault;

end;

 

///////////////////////////// ABAIXO O ORIGINAL ///////////////////////////////////////

 

function SubDirSearch(var Lista: TStringList; Mascara: string; IncluirPasta: Boolean = True): Integer;

var

  Count: Integer;

 

  procedure GetAllFiles(const Mask: string);

  var

    Search: TSearchRec;

    Verz  : string;

    Such  : string;

  begin

    Such := ExtractFileName( Mask );

    Verz := ExtractFilePath( Mask );

    if Verz[Length(Verz)] <> '\' then Verz := Verz + '\';

 

    if FindFirst( Mask, $23, Search) = 0 then // All files

    repeat

      if IncluirPasta then Lista.Add(Verz + Search.Name) else Lista.Add(Search.Name);

      Inc(count);

    until FindNext(Search) <> 0;

 

    // Subdirectories

    if FindFirst(Verz + '*.*', faDirectory, Search) = 0 then

    begin

      repeat

        if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then

          GetAllFiles(Verz + Search.Name + '\' + Such);

      until FindNext(Search) <> 0;

      FindClose(Search);

    end

    else

      FindClose(Search);

  end;

begin

  Count := 0;

  Screen.Cursor := crHourGlass;

  Lista.Clear;

  GetAllFiles( Mascara );

  Screen.Cursor := crDefault;

  Result := Count;

end;