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