Вот как должен выглядеть код:
Private Sub DeleteEmptyFolder(folderPath As String)
If Directory.Exists(folderPath) Then
For Each subFolderPath In Directory.EnumerateDirectories(folderPath)
DeleteEmptyFolder(subFolderPath)
Next
If Directory.EnumerateFiles(folderPath).Any() OrElse
Directory.EnumerateDirectories(folderPath).Any() Then
Return
End If
Directory.Delete(folderPath)
End If
End Sub
Нет смысла использовать DirectoryInfo
, если вам не нужна никакая другая информация о файлах и папках, кроме пути. Вы должны использовать EnumerateFiles
и EnumerateDirectories
вместо GetFiles
и GetDirectories
, если вам специально не нужно заранее получить массив записей. В этом случае вы точно этого не сделаете. Допустим, у вас есть папка с 1000 файлами. Это:
directory.GetFiles.Count = 0
сначала создаст массив, содержащий элемент для всех 1000 файлов, а затем проверит количество элементов в нем. С другой стороны, это:
Directory.EnumerateFiles(folderPath).Any()
вернет True
, как только обнаружит первый файл, игнорируя другие 999. Вам важно только, есть ли какие-либо файлы в папке, а не сколько их ар.