Delphi proporciona muchas funciones para operaciones de archivos, incluida la creación y eliminación de directorios, configuración del directorio actual, obtención del directorio actual, etc. La eliminación de directorios incluye la función (Función) RemoveDir y el procedimiento (PRocedure) RmDir, pero solo pueden eliminar directorios vacíos y no pueden eliminar directorios que no estén vacíos. Para eliminar todo el árbol de directorios (DelTree), debe escribir un programa para eliminar los subdirectorios y archivos que contiene.
Los archivos en el directorio se pueden eliminar llamando a la función DeleteFile, pero los archivos especiales (de solo lectura, de sistema, ocultos, etc.) no se pueden eliminar de manera efectiva. Los atributos del archivo deben cambiarse a archivos normales antes de poder eliminarlos. Puede utilizar la función FileSetAttr para cambiar los atributos del archivo. Aquí, los atributos del archivo especial se establecen en atributos de archivo ordinarios (el valor del atributo es 0).
Teniendo en cuenta que la estructura de directorios de árbol es más adecuada para métodos recursivos, aquí se utilizan algoritmos recursivos para implementar la función DelTree. El siguiente es el procedimiento de implementación específico.
//ruta es la ruta del directorio que se va a eliminar
//Devuelve Verdadero si el directorio se elimina correctamente; en caso contrario, devuelve Falso
función TForm1.Deltree (ruta: cadena): booleano;
var
BuscarRec: TSearchRec;
comenzar
//Determinar si el directorio existe
si el directorio existe (ruta), entonces
comenzar
//Ingrese al directorio y elimine los subdirectorios y archivos que contiene
directorioantiguo := ObtenerDirActual;
ChDir(ruta);
//Busca todos los archivos en el directorio
FindFirst(′??.??′, faAnyFile, SearchRec);
repetir
//Modificar los atributos del archivo a valores de atributos normales
FileSetAttr(SearchRec.Nombre,0);
//Si es un directorio y no .y .., llama a DelTree recursivamente
si (SearchRec.Attr y faDirectory> 0) entonces
comenzar
si(SearchRec.Name[1]<>′.′) entonces
si (no Deltree (SearchRec.Name)) entonces
romper;
fin
//Si es un archivo, elimínelo directamente
demás
si (no eliminar archivo (nombre de registro de búsqueda)) entonces
romper ;
//Seguir buscando hasta el final
hasta (FindNext(SearchRec)<>0);
//Volver al directorio principal y eliminar el directorio
ChDir(′..′);
Resultado := ReMoveDir(ruta);
SetCurrentDir(antiguoDir);
fin
demás
Resultado := Falso ;
fin ;
Este programa está compilado y aprobado bajo Windows 98 y Delphi 4.0.