Delphi 正在获取指定目录中的文件夹计数(也包括子目录)

Delphi 正在获取指定目录中的文件夹计数(也包括子目录),delphi,Delphi,我有一个程序,只给我当前目录的文件夹。如何获得子目录中的所有文件夹(当前目录中的所有文件夹+子目录中的所有文件夹),提前谢谢 procedure GetSubDirectories(const directory : string; list : TStrings) ; var sr : TSearchRec; begin try if FindFirst(IncludeTrailingPathDelimiter(directory) + '*.*', faDirecto

我有一个程序,只给我当前目录的文件夹。如何获得子目录中的所有文件夹(当前目录中的所有文件夹+子目录中的所有文件夹),提前谢谢

procedure GetSubDirectories(const directory : string; list : TStrings) ;
var
 sr : TSearchRec; 
begin  
 try     
  if FindFirst(IncludeTrailingPathDelimiter(directory) + '*.*', faDirectory, sr) < 0 then
   Exit
  else
  repeat
  if ((sr.Attr and faDirectory <> 0) AND (sr.Name <> '.') AND (sr.Name <> '..')) then
   List.Add(IncludeTrailingPathDelimiter(directory) + sr.Name) ;
  until
   FindNext(sr) <> 0;
  finally
   SysUtils.FindClose(sr) ;
  end;
end;
procedure-getsubdirectory(常量目录:string;列表:TStrings);
变量
sr:TSearchRec;
开始
尝试
如果FindFirst(包括RailingPathDelimiter(目录)+'*.*',faDirectory,sr)<0,则
出口
其他的
重复
如果((sr.Attr和faDirectory 0)和(sr.Name'.')和(sr.Name'.')),则
添加(包括RailingPathDelimiter(目录)+sr.Name);
直到
FindNext(sr)0;
最后
SysUtils.FindClose(sr);
结束;
结束;
使用递归:

program Project9;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function ListFolders(const DirName: string): Integer;
var
  Path: string;
  F: TSearchRec;
  SubDirName: string;

begin
  Path:= DirName + '\*.*';
  Result:= 0;
  if FindFirst(Path, faAnyFile, F) = 0 then begin
    try
      repeat
        if (F.Attr and faDirectory <> 0) then begin
          if (F.Name <> '.') and (F.Name <> '..') then begin
            SubDirName:= IncludeTrailingPathDelimiter(DirName) + F.Name;
            Writeln(SubDirName);
            Result:= Result + 1 + ListFolders(SubDirName);
          end;
        end;
      until FindNext(F) <> 0;
    finally
      FindClose(F);
    end;
  end;
end;

begin
  Writeln(ListFolders('C:\Temp'));
  Readln;
end.
程序项目9;
{$APPTYPE控制台}
使用
SysUtils;
函数ListFolders(const DirName:string):整数;
变量
路径:字符串;
F:TSearchRec;
子域名:字符串;
开始
路径:=DirName+'\*.*';
结果:=0;
如果FindFirst(Path,faAnyFile,F)=0,则开始
尝试
重复
如果是(F.Attr和faDirectory 0),则开始
如果是(F.Name'')和(F.Name'..'),则开始
子域名:=IncludeTrailingPathDelimiter(DirName)+F.名称;
Writeln(子域名);
结果:=结果+1+列表文件夹(子域名);
结束;
结束;
直到FindNext(F)0;
最后
FindClose(F);
结束;
结束;
结束;
开始
Writeln(ListFolders('C:\Temp'));
Readln;
结束。
函数GetCount(Dir:string):整数<代码>{ 在您的使用列表中使用这些 系统。Ioutils } 开始 结果:=长度(TDirectory.GetFiles(dir,'.',TsearchOption.soAllDirectories))
结束

谢谢你的帮助。它工作正常。我能在一个函数中得到borth计数吗?像将一个参数作为subdir作为boolean传递吗?当然可以;为什么不自己做其余的事情呢?你能给我一个提示,把条件放在哪里吗?可能的重复添加额外的细节到答案中。