0

下面的 Sub 搜索一些文件夹并删除任何空的文件夹(除非该文件夹称为 Bars 或 Backup)

sPath设置为c:\temp\working\,如果为空则应该扫描和删除的文件夹是子目录Working

sub 完成了这项工作,但是如果它到达所有子目录都为空并且已被删除的地步,那么该文件夹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

谢谢

4

1 回答 1

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")
于 2014-02-20T22:52:33.850 回答