C#中的Directory.GetDirectories的SearchPattern

时间:2016-11-21 15:46:32

标签: c#

所需的搜索说明:

Any string that contains either v2 or v3 (case insensitive)

我试图使用Directory.GetDirectories(path,searchPattern)找到子目录路径,我打算为searchPattern参数提供正则表达式模式,但显然,searchPattern不能是正则表达式。

有没有其他好的方法来过滤包含v2或v3的文件名?

3 个答案:

答案 0 :(得分:3)

如果您想使用正则表达式并避免多次扫描目录列表(以减少必要的IO操作量),您可以这样做:

var baseDir = "C:\\YourDirectory\\";
// Replace with your own Regex.
var dirNames = new Regex("v2|v3", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var dirsFiltered =
    Directory.EnumerateDirectories(baseDir).Where(dir => dirNames.IsMatch(dir)).ToArray();

答案 1 :(得分:1)

Directory.GetDirectories不支持正则表达式,因此您无法使用它。

我会改用它:

foreach (string dir in Directory.GetDirectories(baseDir, "*v2*")
                      .Concat(Directory.GetDirectories(baseDir, "*v3*"))
        )
{
}

答案 2 :(得分:0)

根据https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getdirectories?view=netframework-4.7.2

  

searchPattern字符串
要与名称匹配的搜索字符串   目录。此参数可以包含有效的组合   文字路径和通配符(*和?),但不支持   正则表达式。

一个过滤器:

Import-Module JAMS
$MyEntry = Get-JAMSEntry -Entry <<JAMS_NOTIFY_JAMS_ENTRY>>
$FQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Set-Location -Path "C:\Program Files\Zabbix Agent"
foreach ($a in $MyEntry.AuditTrail) {
    Write-Host $a.Message
    if ($a.Message.StartsWith("Sending")) {
        $Status = "0"
        Write-Host "Sending Data to Zabbix Item"
        Write-Host "Server: " $FQDN
        Write-Host "Status: " $Status
        .\zabbix_sender.exe -vv -c "C:\Program Files\Zabbix Agent\zabbix_agentd.conf" -s $FQDN -k app.jams.server.email -o $Status
    }
    else {
    }
}

多个过滤器:

DirectoryInfo di = new DirectoryInfo(@"d:\sources\");
DirectoryInfo[] dirs = di.GetDirectories("*my filter*");