使用正则表达式筛选文件
`GetFiles` 方法支持通过通配符(如 `` 和 `?`)来匹配文件名,但它也允许我们使用正则表达式来进行更复杂的匹配。这使得我们可以根据文件名的特定模式来过滤文件,而不只是简单的通配符匹配。
示例代码
假设我们需要从一个目录中获取所有以 `.txt` 结尾且包含特定关键字的文件,我们可以这样实现:
```csharp
using System;
using System.IO;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
// 指定目标目录
string directoryPath = @"C:\Your\Directory\Path";
// 创建 DirectoryInfo 对象
DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);
// 定义正则表达式,匹配以 .txt 结尾且包含特定关键字的文件
string pattern = @"^.keyWord.\.txt$";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
// 获取符合正则表达式的文件
FileInfo[] files = dirInfo.GetFiles("", SearchOption.TopDirectoryOnly);
foreach (FileInfo file in files)
{
if (regex.IsMatch(file.Name))
{
Console.WriteLine(file.FullName);
}
}
}
}
```
代码解析
1. 创建 `DirectoryInfo` 对象:首先,我们需要指定目标目录的路径,并创建一个 `DirectoryInfo` 对象以便于操作。
2. 定义正则表达式:这里我们定义了一个正则表达式,用于匹配文件名中包含特定关键字且以 `.txt` 结尾的文件。`RegexOptions.IgnoreCase` 参数确保匹配不区分大小写。
3. 获取文件列表:使用 `GetFiles` 方法获取目录中的所有文件。这里我们使用了通配符 `` 来匹配所有类型的文件,并设置了 `SearchOption.TopDirectoryOnly` 选项,表示只搜索当前目录,不递归搜索子目录。
4. 筛选文件:遍历获取到的文件列表,使用正则表达式检查每个文件名是否符合我们的条件。如果符合条件,则输出该文件的完整路径。
注意事项
- 性能考虑:当处理大量文件时,正则表达式的使用可能会影响性能。因此,在实际应用中应尽量优化正则表达式,避免过于复杂或冗长的模式。
- 跨平台兼容性:在不同的操作系统上,文件名的格式可能会有所不同(例如,Windows 和 Linux 的路径分隔符不同)。确保你的正则表达式能够适应这些差异。
通过这种方式,我们可以灵活地利用 `DirectoryInfo` 和正则表达式来满足各种文件筛选需求,从而提高代码的可维护性和扩展性。