Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 计算文件夹中的文件夹数_Delphi_Delphi 2010 - Fatal编程技术网

Delphi 计算文件夹中的文件夹数

Delphi 计算文件夹中的文件夹数,delphi,delphi-2010,Delphi,Delphi 2010,有人知道我可以用来计算指定目录中文件夹数量的代码吗?我知道的最简单的代码使用t目录从IOUtils单元: function GetDirectoryCount(const DirName: string): Integer; begin Result := Length(TDirectory.GetDirectories(DirName)); end; TDirectory.GetDirectories实际上返回一个包含目录名称的动态数组,因此这有点低效。如果您想要最有效的解决方案,那么应

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

我知道的最简单的代码使用
t目录
IOUtils
单元:

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;
函数GetDirectoryCount(const DirName:string):整数; 变量 res:整数; SearchRec:TSearchRec; 名称:字符串; 开始 结果:=0; res:=FindFirst(TPath.Combine(DirName,'*')、faAnyFile、SearchRec); 如果res=0,则开始 尝试 当res=0时,开始 如果搜索rec.FindData.dwFileAttributes和faDirectory0,则开始 名称:=SearchRec.FindData.cFileName; 如果是(名称“.”)和(名称“..”),则开始 公司(结果); 结束; 结束; res:=FindNext(SearchRec); 结束; 最后 FindClose(SearchRec); 结束; 结束; 结束;
David,为什么在
FindFirst
中使用faAnyFile而不是faDirectory?@Whiler我想包括只读对象、隐藏对象和系统对象。@David,如果GetDirectoryCount为零,是否有可能泄漏?文档中说,只有在匹配的FindFirst正确时才调用FindClose。@LU RD是的,我认为您是对的。我太懒了。现在是否更好?如果文件夹存在,则至少有2个结果:.&;o) 或者,在某些特定情况下,是否可能不使用它们?