获取指定目录中的文件夹数(包括子目录)

时间:2014-09-24 14:36:48

标签: delphi

我有程序只给我当前目录的文件夹。如何获取子目录中的所有文件夹(当前目录中存在的所有文件夹+子目录中存在的所有文件夹)提前感谢

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;

2 个答案:

答案 0 :(得分:1)

使用递归:

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.

答案 1 :(得分:0)

function GetCount(Dir:string):Integer; <head>     开始      结果:=长度(TDirectory.GetFiles(dir,&#39; &#39;,TsearchOption.soAllDirectories))     端;