procedure TFrmMain.Execute(filespec: string; mask: string; recursive: boolean);
var
sr : TSearchRec;
path,tmp : string;
FFileAttrs: TFileAttribs;
begin
FFileAttrs := [];
filespec := filespec + chr(92) + mask;
path := ExtractFilePath(filespec);
{ 1ª fase : Añade los ficheros del directorio }
if FindFirst( filespec , AttrToInt(fFileAttrs), sr) = 0 then
begin
{ Añado el primer fichero }
ListResults.Items.Add(path+sr.FindData.cFileName);
{ Añado el resto de ficheros }
while FindNext(sr) = 0 do
begin
ListResults.Items.Add(path+sr.FindData.cFileName);
end;
FindClose(sr);
end;
{ 2ª fase : Trata los directorios si hay recursividad }
if recursive and (FindFirst( path+'*.*' , Sysutils.faDirectory, sr) = 0) then
begin
{ Re-trato el primer subdirectorio }
if recursive and ((sr.Attr and sysutils.faDirectory)<>0) and (sr.Name<>'.') and (sr.Name<>'..') then
begin
tmp := path + sr.FindData.cFileName;
ListDirs.Items.Add(tmp);
Execute(tmp , mask,recursive);
end;
{ Re-trato el resto de subdirectorios }
while FindNext(sr) = 0 do
begin
if recursive and ((sr.Attr and sysutils.faDirectory)<>0) and (sr.Name<>'.') and (sr.Name<>'..') then
begin
tmp := path + sr.Name;
ListDirs.Items.Add(tmp);
Execute(tmp , mask ,recursive);
end;
end;
FindClose(sr);
end;
end;