获取指定目录下的子目录

根据不同的需求选择不同的方法

获取指定目录下的子目录
操作类有两个选择:
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# 获取指定目录下的文件