// 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 .
Ejemplo de función recursiva del método en profundidad (28): busca en todos los directorios anidados en el directorio actual
Supongo que te gusta
Origin www.cnblogs.com/fansizhe/p/12729746.html
Recomendado
Clasificación