Delphi 如何将TFileAttribute开关添加到IOUtils函数

Delphi 如何将TFileAttribute开关添加到IOUtils函数,delphi,Delphi,下面显示了使用IOUtils计算文件夹和文件数的两个函数。如何添加开关(CountHidden)以使用faHiddenTFileAttribute切换计数文件或文件夹 function SubDirectoryCount( const Path: string; const CountHidden: boolean; const Recurse: boolean ): Cardinal; { Counts all the sub-directories of a specified di

下面显示了使用
IOUtils
计算文件夹和文件数的两个函数。如何添加开关(
CountHidden
)以使用
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;
另外,这两个功能是否有任何改进? 我正在Windows 7上使用Delphi 2010。

您可以使用类

检查这些样品

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;

最初的问题附有一位主持人的评论:“这个问题和答案包含Embarcadero版权所有的代码。它不仅会以当前的形式关闭,还会被删除。”这句话正确吗?@DavidHeffernan我不这么认为,最初的问题与这个问题非常相似,答案是我自己写的(没有使用任何受版权保护的代码)。所以我看不到任何受Embarcadero版权保护的代码。我认为是哪个版主犯了错误。@RRUZ问题只是关于如何使用IOUtils的标准VCLCode。DelphiDabbler是一个网站,在这里,我是一个主要的贡献者,在许多用户之间共享代码。我不记得是我写的原始代码还是Peter写的,但是Delphi Dabbler站点是开源的“许可证不得限制任何一方将软件作为包含多个不同来源程序的软件总发行版的一部分出售或赠送。许可证不要求此类销售收取特许权使用费或其他费用。”这是一种特殊情况(目前仍在敲定中),但请注意,在这里重新询问一个已关闭和已删除的问题是一种相当严重的违规行为,可能会导致您的帐户被暂停。请不要再像这样仓促发帖;最好去讨论发生了什么,并可能把事情弄清楚。很抱歉……我不知道如何找出原因原文已被删除。