Удалить каталог удаляет последний каталог в строке, если он пуст

Приведенный ниже раздел просматривает некоторые папки и удаляет все пустые (если папка не называется 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")
Другие вопросы по тегам