Effacement récursif de fichiers et répertoires
''Auteur : sebikul
''pour utilisation, appeler Clean() avec comme premier paramètre le répertoire à nettoyer
Private Function Clean_Directories_From(Path As String) As Boolean
Dim Directory As String
Dim DirectoryList As String[]
Dim HadError As Boolean
If Not Exist(Path) Then Return False
'Lire le contenu du répertoire
DirectoryList = RDir(Path, Null, gb.Directory, False)
For Each Directory In DirectoryList
'Convertit un chemin relatif en chemin complet
Directory = Path &/ Directory
Debug Subst("Effacement du répertoire &1...", Directory);
If Exist(Directory) Then Try Rmdir Directory
If Not Error Then
If Main.PrintDebug Then Print ("Done")
'Le répertoire n'est pas vide, le nettoyer
Else If Error And Error.Code == 42 Then
Debug ("Le répertoire n'est pas vide")
Clean(Directory)
'Le répertoire est un lien symbolique, le traiter comme un fichier
Else If Error And Error.Code == 49 Then ''lien symbolique
Try Kill Directory
Else If Error Then
Message.Error(Error.Code & " - " & Error.Text)
HadError = True
Debug ("Echec")
Endif
Next
If HadError Then Return False
Return True
End
Private Function Clean_Files_From(Path As String) As Boolean
Dim File As String
Dim FileList As String[]
Dim HadError As Boolean
If Not Exist(Path) Then Return False
'Lire le contenu du répertoire
FileList = RDir(Path, Null, gb.File, False)
For Each File In FileList
'Convertit un chemin relatif en chemin complet
File = Path &/ File
Debug Subst("Cleaning file &1...", File);
Try Kill File
If Error Then
Message.Error(Error.Code & " - " & Error.Text)
HadError = True
Debug ("Echec")
Else
Debug ("Fait")
Endif
Next
If HadError Then Return False
Return True
End
Public Function Clean(Path As String) As Boolean
If Not Clean_Directories_From(Path) Or Not Clean_Files_From(Path) Then
If Not Main.PrintDebug Then Message.Error(Subst("Une erreur s'est produite lors du nettoyage du répertoire &1.", Path))
Return False
Endif
Try Rmdir Path
If Not Error Then Return True
Return False
End
Exemples
Dim Result as Boolean
Result = Clean("/home/user/dossier_fantome")