1、前言

很多时候我们需要获取一个结构未知的文件夹下所有的文件或是指定类型的所有文件,在C#中可以通过递归实现,下面给出实现代码。我这里新建了一个测试文件夹,其结构如下所示:

测试文件夹/
  ├─文件夹1
  │   └─1_1.docx
  │   └─1_2.docx 
  └─文件夹2
  │   └─2_1.pptx
  │   └─2_2.pptx 
  │   └─文件夹3
  │      └─3_1.xlsx
  │      └─3_2.xlsx
  │      └─文件夹4
  │         └─4_1.bmp
  │         └─4_2.bmp

C#递归获取文件夹下全部文件_App

2、获取全部文件

获取全部文件代码如下:

using System;
using System.Collections.Generic;
using System.IO;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> files = GetFiles(@"D:\测试文件夹");
            foreach (var item in files)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        static List<string> GetFiles(string directory, string pattern = "*.*")
        {
            List<string> files = new List<string>();
            foreach (var item in Directory.GetFiles(directory, pattern))
            {
                files.Add(item);
            }
            foreach (var item in Directory.GetDirectories(directory))
            {
                files.AddRange(GetFiles(item, pattern));
            }
            return files;
        }
    }
}

结果如下图所示:

D:\测试文件夹\文件夹1\1_1.docx
D:\测试文件夹\文件夹1\1_2.docx
D:\测试文件夹\文件夹2\2_1.pptx
D:\测试文件夹\文件夹2\2_2.pptx
D:\测试文件夹\文件夹2\文件夹3\3_1.xlsx
D:\测试文件夹\文件夹2\文件夹3\3_2.xlsx
D:\测试文件夹\文件夹2\文件夹3\文件夹4\4_1.bmp
D:\测试文件夹\文件夹2\文件夹3\文件夹4\4_2.bmp

3、获取指定类型文件

获取指定类型文件的代码也很简单,下面代码演示了获取*.docx*.pptx文件:

using System;
using System.Collections.Generic;
using System.IO;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> files = GetFiles(@"D:\测试文件夹", new string[] { "*.docx", "*.pptx" });
            foreach (var item in files)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

        static List<string> GetFiles(string directory, string[] patterns)
        {
            List<string> files = new List<string>();
            foreach (var pattern in patterns)
            {
                foreach (var item in Directory.GetFiles(directory, pattern))
                {
                    files.Add(item);
                }
            }
            foreach (var item in Directory.GetDirectories(directory))
            {
                files.AddRange(GetFiles(item, patterns));
            }
            return files;
        }
    }
}

结果如下图所示:

D:\测试文件夹\文件夹1\1_1.docx
D:\测试文件夹\文件夹1\1_2.docx
D:\测试文件夹\文件夹2\2_1.pptx
D:\测试文件夹\文件夹2\2_2.pptx