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; |