根据不同的需求选择不同的方法
获取指定目录下的子目录
操作类有两个选择:
Directory : 静态类,对文件夹的操作单一时选择;
DirectoryInfo :动态类,对文件夹有多种不同操作时选择;
方法也有两种选择:
GetDirectories() :需要等所有子目录都准备好才能进行操作,返回结果为数组类型,一般子目录数量不大时使用;
EnumerateDirectories() :.net 4.0 后增加,更高效,无需等待子目录准备好就可以进行操作,返回结果为 IEnumerate<T> 类型,子目录数量巨大时优先使用;
注意:Directory 调用方法时,关键类型是 string;DirectoryInfo 则是 DirectoryInfo 类型;
上述两个方法都有 3 个重载,分别是:
返回当前目录下所有子目录 (默认,不处理子目录);
按通配符返回自定目录 (只支持 * 和 ?);
按通配符返回所有子目录 (所有层级)
获取指定目录下的子目录

测试目录结构:
处理代码:
public void test_subdirectory() {
string path = @"d:\test";
string[] result1 = Directory.GetDirectories(path);
string[] result2 = Directory.GetDirectories(path, "test*");
string[] result3 = Directory.GetDirectories(path, "test*", SearchOption.AllDirectories);
string[] result4 = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);
IEnumerable<string> result5 = Directory.EnumerateDirectories(path);
IEnumerable<string> result6 = Directory.GetDirectories(path, "test*");
IEnumerable<string> result7 = Directory.GetDirectories(path, "test*", SearchOption.AllDirectories);
IEnumerable<string> result8 = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);
DirectoryInfo info = new DirectoryInfo(path);
DirectoryInfo[] result9 = info.GetDirectories();
DirectoryInfo[] result10 = info.GetDirectories("test*");
DirectoryInfo[] result11 = info.GetDirectories("test*", SearchOption.AllDirectories);
DirectoryInfo[] result12 = info.GetDirectories("*", SearchOption.AllDirectories);
//DirectoryInfo info = new DirectoryInfo(path);
IEnumerable<DirectoryInfo> result13 = info.EnumerateDirectories();
IEnumerable<DirectoryInfo> result14 = info.EnumerateDirectories("test*");
IEnumerable<DirectoryInfo> result15 = info.EnumerateDirectories("test*", SearchOption.AllDirectories);
IEnumerable<DirectoryInfo> result16 = info.EnumerateDirectories("*", SearchOption.AllDirectories);
print(result1);
print(result2);
print(result3);
print(result4);
print(result5);
print(result6);
print(result7);
print(result8);
print_info(result9);
print_info(result10);
print_info(result11);
print_info(result12);
print_info(result13);
print_info(result14);
print_info(result15);
print_info(result16);
}
public void print(IEnumerable<object> collection) {
foreach (var item in collection) {
Console.WriteLine(item.ToString());
}
Console.WriteLine("---------------------");
}
public void print_info(IEnumerable<object> collection) {
foreach (DirectoryInfo item in collection) {
Console.WriteLine($"{item.FullName}, {item.CreationTime}");
}
Console.WriteLine("---------------------");
}

结果:
默认只会返回 test 当前目录下的子目录:

返回当前目录下的包含 ”test“ 的目录:

返回所有层级包含 ”test“ 的目录:

返回所有子目录:
关于获取文件部分,请参考:
C# 获取指定目录下的文件