How to add TFileAttribute switch in IOUtils function

The following are two functions that use IOUtils to count folders and files. How to add a switch ( CountHidden ) for switching files or folders of counting using faHidden TFileAttribute ?

 function SubDirectoryCount( const Path: string; const CountHidden: boolean; const Recurse: boolean ): Cardinal; { Counts all the sub-directories of a specified directory. If Recurse is true all sub-directories are counted recursively, otherwise only immediate sub-directories are counted. Count Hidden toggles counting hidden files (faHidden). } var StrArray: Types.TStringDynArray; // array of subdirectories SearchOption: IOUtils.TSearchOption; // directory search option begin if Recurse then SearchOption := IOUtils.TSearchOption.soAllDirectories else SearchOption := IOUtils.TSearchOption.soTopDirectoryOnly; StrArray := IOUtils.TDirectory.GetDirectories( Path, '*', SearchOption ); Result := length( StrArray ); end; function SubDirectoryFileCount( const Path: string; const CountHidden: boolean; const Recurse: boolean ): Cardinal; { Counts all the files of a specified directory. If Recurse is true files in all sub-directories are counted recursively, otherwise only immediate sub-directories are counted. Count Hidden toggles counting hidden files (faHidden).} var StrArray: Types.TStringDynArray; // array of subdirectories SearchOption: IOUtils.TSearchOption; // directory search option begin if Recurse then SearchOption := IOUtils.TSearchOption.soAllDirectories else SearchOption := IOUtils.TSearchOption.soTopDirectoryOnly; StrArray := IOUtils.TDirectory.GetFiles( Path, '*', SearchOption ); Result := length( StrArray ); end; 

Also, are there any improvements in these two functions? I am using Delphi 2010 on Windows 7.

+4
source share
1 answer

You can use the TDirectory.TFilterPredicate class.

check these samples

 function SubDirectoryCount( const Path: string; const CountHidden: boolean; const Recurse: boolean ): Cardinal; var StrArray : Types.TStringDynArray; SearchOption : IOUtils.TSearchOption; Predicate : TDirectory.TFilterPredicate; begin if Recurse then SearchOption := IOUtils.TSearchOption.soAllDirectories else SearchOption := IOUtils.TSearchOption.soTopDirectoryOnly; Predicate := function(const Path: string; const SearchRec: TSearchRec): Boolean begin Result := (SearchRec.Attr and faHidden)=0; end; if CountHidden then StrArray := IOUtils.TDirectory.GetDirectories( Path, '*', SearchOption) else StrArray := IOUtils.TDirectory.GetDirectories( Path, '*', SearchOption, Predicate); Result := length(StrArray); end; function SubDirectoryFileCount( const Path: string; const CountHidden: boolean; const Recurse: boolean ): Cardinal; var StrArray : Types.TStringDynArray; SearchOption : IOUtils.TSearchOption; Predicate : TDirectory.TFilterPredicate; begin if Recurse then SearchOption := IOUtils.TSearchOption.soAllDirectories else SearchOption := IOUtils.TSearchOption.soTopDirectoryOnly; Predicate := function(const Path: string; const SearchRec: TSearchRec): Boolean begin Result := (SearchRec.Attr and faHidden)=0; end; if CountHidden then StrArray := IOUtils.TDirectory.GetFiles( Path, '*', SearchOption ) else StrArray := IOUtils.TDirectory.GetFiles( Path, '*', SearchOption, Predicate); Result := length(StrArray); end; 
+7
source

Source: https://habr.com/ru/post/1383651/


All Articles