給定一個目錄,使用 C# 刪除目錄中存在的所有文件和子目錄。
這個問題有兩種變體。在第一個變體中,我們從指定目錄中刪除所有文件和子目錄以及根目錄。在第二個變體中,我們刪除了所有文件和子目錄,但保留了根目錄。
1.刪除根目錄
要刪除指定目錄及其所有子目錄,請使用 Directory.Delete() 方法。下面的例子演示了它的用法。此方法的第二個參數指示是否刪除子目錄和文件。
1 2 3 4 5 6 7 8 9 10 11 |
using System.IO; public class Example { public static void Main() { string path = @"C:\some\path"; Directory.Delete(path, true); } } |
我們也可以使用一個實例 DirectoryInfo
類刪除子目錄和文件。它有 DirectoryInfo.Delete()
方法,其工作原理類似於 Directory.Delete()
上面討論的方法。
1 2 3 4 5 6 7 8 9 10 11 12 |
using System.IO; public class Example { public static void Main() { string path = @"C:\some\path"; DirectoryInfo directory = new DirectoryInfo(path); directory.Delete(true); } } |
2.保留根目錄
要刪除所有文件和子目錄而不刪除目錄,想法是遍歷所有文件/子目錄並單獨刪除它們。我們可以使用 GetFiles 和 GetDirectories() 檢索現有文件和目錄的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.IO; public class Example { public static void Main() { string path = @"C:\Pending"; DirectoryInfo directory = new DirectoryInfo(path); foreach (FileInfo file in directory.GetFiles()) { file.Delete(); } foreach (DirectoryInfo dir in directory.GetDirectories()) { dir.Delete(true); } } } |
我們也可以使用 EnumerateFiles 和 EnumerateDirectories() 枚舉現有文件和目錄的方法。這在處理許多文件和目錄時效率更高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.IO; public class Example { public static void Main() { string path = @"C:\some\path"; DirectoryInfo directory = new DirectoryInfo(path); foreach (FileInfo file in directory.EnumerateFiles()) { file.Delete(); } foreach (DirectoryInfo dir in directory.EnumerateDirectories()) { dir.Delete(true); } } } |
這也可以使用 LINQ 來完成 ForEach()
方法而不是 foreach 循環:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.IO; using System.Linq; public class Example { public static void Main() { string path = @"C:\some\path"; DirectoryInfo directory = new DirectoryInfo(path); directory.EnumerateFiles() .ToList().ForEach(f => f.Delete()); directory.EnumerateDirectories() .ToList().ForEach(d => d.Delete(true)); } } |
這是一種替代方法,它首先使用刪除指定目錄及其所有子目錄 Directory.Delete() 方法,然後重新創建目錄。請注意,這將永久刪除根目錄上的一些屬性。
1 2 3 4 5 6 7 8 9 10 11 12 |
using System.IO; public class Example { public static void Main() { string path = @"C:\some\path"; Directory.Delete(path, true); Directory.CreateDirectory(path); } } |
這就是使用 C# 刪除目錄中的所有文件和子目錄。