如何过滤出特定扩展名的文件
在C#中,DirectoryInfo类的GetFiles方法本身并不直接支持通过参数来过滤多种类型的文件。不过,你可以通过组合多个过滤条件来实现这一功能。例如,你可以首先获取所有文件,然后使用 LINQ(Language Integrated Query)来过滤出你需要的文件类型。
以下是一个示例,展示了如何过滤出特定扩展名的文件(例如 .txt 和 .csv 文件):
csharp复制代码
| using System; | |
| using System.IO; | |
| using System.Linq; | |
| class Program | |
| { | |
| static void Main() | |
| { | |
| // 指定要搜索的目录 | |
| string directoryPath = @"C:\YourDirectoryPath"; | |
| // 创建 DirectoryInfo 对象 | |
| DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath); | |
| // 获取目录中所有文件的信息 | |
| FileInfo[] allFiles = directoryInfo.GetFiles("*.*"); // 获取所有文件 | |
| // 使用 LINQ 过滤出 .txt 和 .csv 文件 | |
| var filteredFiles = allFiles.Where(file => file.Extension == ".txt" || file.Extension == ".csv").ToArray(); | |
| // 输出过滤后的文件路径 | |
| foreach (var file in filteredFiles) | |
| { | |
| Console.WriteLine(file.FullName); | |
| } | |
| } | |
| } |
在这个示例中,我们首先使用 GetFiles("*.*") 获取目录中的所有文件,然后使用 LINQ 的 Where 方法过滤出扩展名为 .txt 或 .csv 的文件。
另一种方法是直接使用 Directory.EnumerateFiles 方法,它支持搜索模式,并且比 GetFiles 更加高效,特别是当处理大量文件时。你可以使用多个搜索模式,然后将结果合并:
csharp复制代码
| using System; | |
| using System.Collections.Generic; | |
| using System.IO; | |
| using System.Linq; | |
| class Program | |
| { | |
| static void Main() | |
| { | |
| // 指定要搜索的目录 | |
| string directoryPath = @"C:\YourDirectoryPath"; | |
| // 定义要过滤的文件扩展名 | |
| string[] extensions = { "*.txt", "*.csv" }; | |
| // 使用 Directory.EnumerateFiles 获取每个扩展名的文件 | |
| IEnumerable<string> allFiles = extensions.SelectMany(ext => Directory.EnumerateFiles(directoryPath, ext)); | |
| // 输出过滤后的文件路径 | |
| foreach (var file in allFiles) | |
| { | |
| Console.WriteLine(file); | |
| } | |
| } | |
| } |
在这个示例中,我们使用 Directory.EnumerateFiles 方法结合多个搜索模式,并通过 SelectMany 将结果合并成一个集合。这种方法通常比先获取所有文件再过滤更高效,因为它避免了不必要的文件枚举。

浙公网安备 33010602011771号