詳細な方法(28)-再帰関数の例:現在のディレクトリの下にあるすべてのネストされたディレクトリを検索

//上記の例では、実用的な機能だけを使用することを指示し、再帰関数の性質を説明していません。

ユニット Unit1は、インタフェースが使用する 
  Windowsの、メッセージ、sysutilsの、バリアント、クラス、グラフィックス、コントロール、フォーム、
  ダイアログ、StdCtrlsを、種類の 
  TForm1 = class(TForm)
    Button1:TButton; 
    Memo1:TMemo; procedure Button1Click(Sender:TObject);
   end ; var 
  Form1:TForm1; implementation {$ R * .dfm} //ディレクトリ内のすべてのディレクトリをリストします(ネストを含む) )関数プロシージャ GetDirs(dirName:string ; List:TStrings);
 var 
  SRec:TSearchRec;             {define TSearchRec structure variable} 
  dir:






    








string ;
 const 
  attr:Integer = faDirectory; {これはフォルダーであることを意味するファイル属性定数} 
begin 
  dirName:= ExcludeTrailingBackslash(dirName)+ '\' ; {最後のものかどうかわからない;最初に削除してから追加} 
  dir: dirNameに+ = '*' ; {追加\ ;. * * *またはファイルの全て、システムは、ファイル・ディレクトリとして使用される} 

  IF関数は、FindFirst(DIR、ATTR、SRECが)= 0  次いで、  {検索を開始し、そして付与情報にSREC、最初の戻り0を求める} 
  開始
    REPEATを
      IF(SRec.Attr = ATTR)               {}フォルダ場合 
         (SRec.Name <> ''                {負のレベルディレクトリ} 
         (SRec.Name <> '..'次に             {ルートディレクトリを除外}
       begin 
         List.Add(dirName + SRec.Name);       {Listで結果を記録する} 
         GetDirs(dirName + SRec.Name、List); {この文は再帰呼び出しであり、文がない場合は、現在のディレクトリのみを検索できます} 
       end ;
     until(FindNext(SRec)<> 0);                 {Find next、return 0意味が見つかった} 
  end ;

  FindClose(SRec);                            {End search} 
end ; {Test} プロシージャ TForm1.Button1Click(Sender:TObject);
 var 
  list: TStrings;
  リストの開始:= TStringList.Create;
  GetDirs( 'C:\ Downloads'、list);
  Memo1.Lines:= list;
  list.Free; end ;










終わり

おすすめ

転載: www.cnblogs.com/fansizhe/p/12729746.html