Ejemplo de función recursiva del método en profundidad (28): busca en todos los directorios anidados en el directorio actual

// El ejemplo anterior no puede explicar la esencia de la función recursiva, solo llega a una función práctica, solo

 
  úsala . Unidad Unidad1; la interfaz usa Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formas, 
  Diálogos, StdCtrls; tipo 
  TForm1 = class (TForm) 
    Button1: TButton; 
    Memo1: TMemo; procedure Button1Click (Sender: TObject);
   end ; var 
  Form1: TForm1; implementación {$ R * .dfm} // Lista todos los directorios en un directorio (incluida la anidación ) Procedimiento de función GetDirs (dirName: string ; List: TStrings);
 var 
  SRec: TSearchRec;             {define la variable de estructura TSearchRec} 
  dir:






    








Cadena ;
 const 
  attr: Integer = faDirectory; {constantes de atributo de archivo, lo que indica la carpeta} 
Begin 
  dirName: = ExcludeTrailingBackslash (dirName) + '\' ; {no conocen el pasado no es \; retire primero, además} 
  dir: = dirName + '*. *' ; {plus \; *. * or * significa todos los archivos, el sistema tratará el directorio como un archivo} 

  si FindFirst (dir, attr, SRec) = 0 y  luego  {comienza a buscar, y Proporcione información a SRec, devuelva 0 para encontrar el primero} 
  comience a 
    repetir 
      if (SRec.Attr = attr) y               {si es una carpeta} 
         (SRec.Name <> '.' ) Y               {excluya el directorio superior} 
         (SRec.Name <> '..' ) luego             {excluir directorio raíz}
       comenzar 
         List.Add (dirName + SRec.Name);       {Registre el resultado con List} 
         GetDirs (dirName + SRec.Name, List); {Esta oración es una llamada recursiva, si no hay una oración, solo puede buscar el directorio actual} 
       end ;
     hasta que (FindNext (SRec) <> 0 );                 {Find next, return 0 significa found} 
  end ;

  FindClose (SRec);                            {End search} 
end ; {Test} procedure TForm1.Button1Click (Sender: TObject);
 var 
  list: de TStrings; el inicio 
  de lista: = TStringList.Create;
  GetDirs ( 'C: \ Descargas' , Lista);
  Memo1.Lines el: = Lista;
  list.Free; Fin ;










terminar .

Supongo que te gusta

Origin www.cnblogs.com/fansizhe/p/12729746.html
Recomendado
Clasificación