C# 获取指定目录下的文件

使用到的类

DirectoryInfo 和 Directory,后者提供静态方法,可以直接使用;
对同一文件有多种操作时,可以使用 DirectoryInfo;
对文件的操作单一时,就是用 Directory

默认方式获取目录下的所有文件

C# 获取指定目录下的文件

使用 GetFiles() 方法,默认只返回当前目录下的文件,不处理子文件夹,该方法有三种重载:

  1. GetFiles() 不带参数,按默认返回
  2. GetFiles(string pattern) 使用通配符返回指定文件,该模式只支持 * 和 ?作为通配符,不支持正则表达式(* 表示匹配多个字符,? 表示匹配一个字符)
  3. GetFiles(string pattern, SearchOptions option) 也支持通配符,SearchOptions 选择 AllDirectories 时,会返回子目录下的文件

注意: DirectoryInfo 返回的结果是 FileInfo 类型的数组;
Directory 返回的结果则是 string 类型的数组

SearchOptions 类型

源代码如下:

using System.Runtime.InteropServices;

namespace System.IO {
    [ComVisible(true)]
    public enum SearchOption {
        TopDirectoryOnly = 0,
        AllDirectories = 1
    }
}

枚举类型,控制只处理当前目录,还是会一并处理子目录

测试目录:

D:\test\ 目录下

Directory 例子

默认返回当前目录所有文件

string path = @"d:\test";
string[] files = Directory.GetFiles(path);

输出 files 结果为:

根据通配符返回结果:

string path = @"d:\test";
string pattern = "*.txt";
string[] files = Directory.GetFiles(path, pattern);

输出 files 结果为:

根据通配符,并且返回所有子目录的文件:

string path = @"d:\test";
string pattern = "*.txt";
string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories);

输出 files 结果为:

DirectoryInfo 例子

注意:由于 DirectoryInfo.GetFiles() 返回的是 FileInfo 类型,所以输出其 FullName 和 LastWriteTime

Console.WriteLine(item.FullName + " : " + item.LastWriteTime);

默认返回当前目录所有文件

string path = @"d:\test";
DirectoryInfo directory_info = new DirectoryInfo(path);
FileInfo[] files = directory_info.GetFiles();

输出 files 结果为:

根据通配符返回结果:

string path = @"d:\test";
string pattern = "*.txt";
DirectoryInfo directory_info = new DirectoryInfo(path);
FileInfo[] files = directory_info.GetFiles(pattern);

输出 files 结果为:

根据通配符,并且返回所有子目录的文件:

string path = @"d:\test";
string pattern = "*.txt";
DirectoryInfo directory_info = new DirectoryInfo(path);
FileInfo[] files = directory_info.GetFiles(pattern, SearchOption.AllDirectories);

输出 files 结果为:

参考

Directory.GetFiles Method

关于获取子目录部分请参考:
获取指定目录下的子目录