網上有相關方法,但是有一個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);
}
}
}
}
}
}
主要是判斷所有文件夾及子文件夾是不是有文件,如果沒有就直接刪除包括子目錄,循環時增加判斷是否存在對應的目錄,可以避免因刪除目錄及子目錄后,前面取的文件夾列表對應元素目錄實際不存了報錯。
