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")