網上有相關方法,但是有一個BUG,就是目錄下的子目錄為空,只會刪除目錄,不會刪除父目錄,應該是判斷時還有子目錄存在,不為空。以下是我類似方法改進後,去除這個BUG。
直接看程式碼
private void button1_Click(object sender, EventArgs e) { string dir = @"D:\TestTemp"; KillEmptyFolder(dir); } private void KillEmptyFolder(string sPath) { DirectoryInfo info = new DirectoryInfo(sPath); foreach (string item in Directory.GetFileSystemEntries(sPath, "*", SearchOption.AllDirectories)) { if (!File.Exists(item)) { if (Directory.Exists(item)) { string[] nFiles = Directory.GetFiles(item, "*.*", SearchOption.AllDirectories); if (nFiles.Count() == 0) { Directory.Delete(item, true); } } } } }
主要是判斷所有資料夾及子資料夾是不是有檔案,如果沒有就直接刪除包括子目錄,迴圈時增加判斷是否存在對應的目錄,可以避免因刪除目錄及子目錄後,前面取的資料夾列表對應元素目錄實際不存了報錯。