Delphi fournit de nombreuses fonctions pour les opérations sur les fichiers, notamment la création et la suppression de répertoires, la définition du répertoire courant, l'obtention du répertoire courant, etc. La suppression de répertoire inclut la fonction (Function) RemoveDir et la procédure (PRocedure) RmDir, mais elles ne peuvent supprimer que les répertoires vides et ne peuvent pas supprimer les répertoires non vides. Pour supprimer l’intégralité de l’arborescence de répertoires (DelTree), vous devez écrire un programme pour supprimer les sous-répertoires et les fichiers qu’il contient.
Les fichiers du répertoire peuvent être supprimés en appelant la fonction DeleteFile, mais les fichiers spéciaux (en lecture seule, système, cachés, etc.) ne peuvent pas être supprimés efficacement. Les attributs de fichier doivent être modifiés en fichiers ordinaires avant de pouvoir être supprimés. Vous pouvez utiliser la fonction FileSetAttr pour modifier les attributs du fichier. Ici, les attributs du fichier spécial sont définis sur les attributs du fichier ordinaire (la valeur de l'attribut est 0).
Considérant que la structure arborescente des répertoires est la plus adaptée aux méthodes récursives, des algorithmes récursifs sont utilisés ici pour implémenter la fonction DelTree. Voici la procédure spécifique de mise en œuvre.
//path est le chemin du répertoire à supprimer
// Renvoie True si le répertoire est supprimé avec succès, sinon renvoie False
fonction TForm1.Deltree (chemin : chaîne) : Booléen ;
var
SearchRec : TSearchRec ;
commencer
//Détermine si le répertoire existe
si DirectoryExists (chemin) alors
commencer
//Entrez le répertoire et supprimez les sous-répertoires et les fichiers qu'il contient
oldDir := GetCurrentDir;
ChDir(chemin);
//Trouver tous les fichiers du répertoire
FindFirst(′??.??′, faAnyFile, SearchRec);
répéter
//Modifier les attributs du fichier en valeurs d'attribut normales
FileSetAttr(SearchRec.Name,0);
// S'il s'agit d'un répertoire et non de . et .., appelez DelTree de manière récursive.
si (SearchRec.Attr et faDirectory > 0) alors
commencer
si(SearchRec.Name[1]<>′.′) alors
si (pas Deltree (SearchRec.Name)) alors
casser;
fin
//S'il s'agit d'un fichier, supprimez-le directement
autre
si (pas Supprimer le fichier (SearchRec.Name)) alors
casser ;
//Continuer la recherche jusqu'à la fin
jusqu'à (FindNext(SearchRec)<>0) ;
//Retour au répertoire parent et supprime le répertoire
ChDir(′..′);
Résultat := ReMoveDir(chemin);
SetCurrentDir(ancienDir);
fin
autre
Résultat := Faux ;
fin ;
Ce programme a été compilé et passé sous Windows 98 et Delphi 4.0.