function SearchFile(sFileName, sRootDir: String; bFileOnly,bRecurse: Boolean): TStringlist;
procedure DoSearchFile(sFileName, sRootDir: String; bFileOnly,bRecurse: Boolean; var FileList: TStringList);
var
Found: Integer;
SearchRec: TSearchRec;
begin
Found := FindFirst(sRootDir+'\*.*', faAnyFile, SearchRec);
while Found=0 do
begin
if (SearchRec.Attr=faDirectory) and (SearchRec.Name<>'.') and
(SearchRec.Name <>'..') then
begin
if (AnsiCompareText(sFileName, SearchRec.Name)=0) and not bFileOnly then
FileList.Add(sRootDir+'\'+SearchRec.Name);
if bRecurse then
DoSearchFile(sFileName, sRootDir+'\'+SearchRec.Name, bFileOnly, bRecurse, FileList);
end else if (AnsiCompareText(sFileName, SearchRec.Name) =0) then
FileList.Add(sRootDir + '\' + SearchRec.Name);
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
var
FileList: TStringList;
begin
FileList := TStringList.Create;
FileList.Clear;
DoSearchFile(sFileName, sRootDir, bFileOnly, bRecurse, FileList);
Result := FileList;
end;