在文件夹中计算文件夹数量

11

有人知道我可以使用什么代码来计算指定目录中文件夹的数量吗?

1个回答

13

我所知道的最简单的代码使用IOUtils单元中的TDirectory

function GetDirectoryCount(const DirName: string): Integer;
begin
  Result := Length(TDirectory.GetDirectories(DirName));
end;

TDirectory.GetDirectories实际上返回包含目录名称的动态数组,因此这种方法有点低效。如果您想要最有效的解决方案,则应使用FindFirst进行枚举。

function GetDirectoryCount(const DirName: string): Integer;
var
  res: Integer;
  SearchRec: TSearchRec;
  Name: string;
begin
  Result := 0;
  res := FindFirst(TPath.Combine(DirName, '*'), faAnyFile, SearchRec);
  if res=0 then begin
    try
      while res=0 do begin
        if SearchRec.FindData.dwFileAttributes and faDirectory<>0 then begin
          Name := SearchRec.FindData.cFileName;
          if (Name<>'.') and (Name<>'..') then begin
            inc(Result);
          end;
        end;
        res := FindNext(SearchRec);
      end;
    finally
      FindClose(SearchRec);
    end;
  end;
end;

大卫,你为什么在FindFirst中使用_faAnyFile_而不是_faDirectory_ - Whiler
@Whiler 我想要包含只读对象、隐藏对象和系统对象。 - David Heffernan
@David,如果GetDirectoryCount为零,是否存在可能的泄漏?文档仅表示在匹配FindFirst时才调用FindClose。 - LU RD
@LU RD 是的,我认为你是对的。我当时有点懒惰了。现在好一些了吗? - David Heffernan
如果文件夹存在,则至少有2个结果:.和.. ;o) 或者在某些特定情况下可能没有它们,这是可能的吗? - Whiler
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接