Dateien und Verzeichnisse rekursiv löschen
Autor: sebikul
(Stand der EN Seite vom 17.03.2024)
Rufen Sie dazu Clean() auf, wobei der erste Parameter das zu säubernde Verzeichnis ist und der zweite Parameter ein Boolean, wenn Sie den Stammordner nach der Säuberung löschen wollen.
Private Depth As Integer
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
DirectoryList = Dir(Path, Null, gb.Directory)
For Each Directory In DirectoryList
Directory = Path &/ Directory
Print Subst("Cleaning directory &1...", Directory),
If Exist(Directory) Then Try Rmdir Directory
If Not Error Then
Print ("Done")
Else If Error And Error.Code = 43 Then
Message.Warning(Subst(("Access forbiden. You can't access &1"), Directory))
'Print
Else If Error And Error.Code = 42 Or Error.Code = 70 Then
Print ("Directory has content")
Execute(Directory)
Print Subst("Deleting directory &1...", Directory),
Rmdir Directory
Print ("Done")
Else If Error And Error.Code = 49 Then ''symbolic links
Try Kill Directory
Else If Error Then
Message.Error(Error.Code & " - " & Error.Text)
HadError = True
Print ("Failed")
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
FileList = Dir(Path, Null, gb.File)
For Each File In FileList
File = Path &/ File
Print Subst("Cleaning file &1...", File),
Try Kill File
If Error And Error.Code = 43 Then
Message.Warning(Subst(("Access forbiden. You can't access &1"), File))
'Print
Else If Error Then
Message.Error(Error.Code & " - " & Error.Text)
HadError = True
Print ("Failed")
Else
Print ("Done")
Endif
Next
If HadError Then Return False
Return True
End
Public Function Clean(Path As String, Optional CleanRoot As Boolean = True) As Boolean
Depth = 1
Return Execute(Path, CleanRoot)
End
Private Function Execute(Path As String, Optional CleanRoot As Boolean = True) As Boolean
If IsDir(Path) Then
Inc Depth
If Not Clean_Files_From(Path) Or Not Clean_Directories_From(Path) Then
If Not Main.PrintDebug Then Message.Error(Subst(("There was an error while cleaning the directory &1.\n You may check the logs for further information. If this is a bug, please report it."), Path))
Return False
Endif
Dec Depth
If CleanRoot And Depth = 1 Then
Print Subst("Deleting directory &1...", Path),
Try Rmdir Path
Print ("Done")
Endif
Return True
Else
Print Subst("Cleaning file &1...", Path),
Try Kill Path
If Error Then
Message.Error(Error.Code & " - " & Error.Text)
Print ("Failed")
Return False
Else
Print ("Done")
Return True
Endif
Endif
End
Beispiele
Dim Result as Boolean
Result = Clean("/home/user/dummy-folder", False)