Удалить каталог удаляет последний каталог в строке, если он пуст
Приведенный ниже раздел просматривает некоторые папки и удаляет все пустые (если папка не называется Bars или Backup).
sPath установлен в c:\temp\working\
и папки, которые должны быть отсканированы и удалены, если они пустые, являются подкаталогами Working
Подчиненный выполняет работу, однако, если он достигает точки, где все подкаталоги пусты и удалены, тогда папка Working
затем удаляется, что не то, что мне нужно, чтобы это произошло.
Любые предложения о том, как это остановить, или мне нужно пересоздать каталог, если он дойдет до этой стадии (не идеально)
Public Sub DeleteEmptyFolders(ByVal sPath As String)
Dim SubDirectories() As String = Directory.GetDirectories(sPath)
For Each strDirectory As String In SubDirectories
DeleteEmptyFolders(strDirectory)
Next
If Not (UCase(Path.GetDirectoryName(sPath)).Contains("BACKUP")) Or (UCase(Path.GetDirectoryName(sPath)).Contains("BARS")) Then
If Directory.GetFiles(sPath).Length + Directory.GetDirectories(sPath).Length = 0 Then
Directory.Delete(sPath)
MsgBox("Deleting empty folder: " & sPath)
End If
End If
End Sub
Спасибо
1 ответ
Решение
Первый подход к решению проблемы может состоять в том, чтобы передать начальный корень и не удалять каталог, если он является начальным корнем.
Public Sub DeleteEmptyFolders(ByVal sPath As String, ByVal sRoot As String)
Dim SubDirectories() As String = Directory.GetDirectories(sPath )
For Each strDirectory As String In SubDirectories
DeleteEmptyFolders(strDirectory, sRoot)
Next
If Not (UCase(Path.GetDirectoryName(sPath)).Contains("BACKUP")) Or (UCase(Path.GetDirectoryName(sPath)).Contains("BARS")) Then
If Directory.GetFiles(sPath).Length + Directory.GetDirectories(sPath).Length = 0 Then
if sPath <> sRoot Then
Directory.Delete(sPath)
Console.WriteLine("Deleting empty folder: " & sPath)
End If
End If
End If
End Sub
Позвонить с
DeleteEmptyFolders("D:\temp", "D:\temp")