如何过滤出特定扩展名的文件

在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 将结果合并成一个集合。这种方法通常比先获取所有文件再过滤更高效,因为它避免了不必要的文件枚举。

posted @ 2024-11-02 09:27  奥兰王子  阅读(4)  评论(0编辑  收藏  举报