2014-02-20 75 views
0

下面通過一些文件夾,子搜索最後一個目錄,並刪除任何空的(除非該文件夾被稱爲酒吧或備份)刪除目錄中刪除的字符串,如果其空

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") 
+0

似乎不喜歡這個事實第二個變量也是一個路徑 – elmonko

+0

我的不好,從不需要的GetDirectories刪除sRoot – Steve

+0

真棒,像夢一樣工作 - 謝謝 – elmonko