網上有相關方法,但是有一個BUG,就是目錄下的子目錄為空,只會刪除目錄,不會刪除父目錄,應該是判斷時還有子目錄存在,不為空。以下是我類似方法改進后,去除這個BUG。
直接看代碼
// 刪除掉空文件夾,所有沒有子“文件系統”的都將被刪除 private void KillEmptyFolder(string sPath) { if (Directory.Exists(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); //如果文件個數為0則刪除目錄及子目錄 if (nFiles.Count() == 0) { //Directory.Delete(item, true); //刪除的文件夾發送到回收站 Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(item, Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); } } } } } }
主要是判斷所有文件夾及子文件夾是不是有文件,如果沒有就直接刪除包括子目錄,循環時增加判斷是否存在對應的目錄,可以避免因刪除目錄及子目錄后,前面取的文件夾列表對應元素目錄實際不存了報錯。