Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中Directory.GetDirectories的搜索模式#_C# - Fatal编程技术网

C# C中Directory.GetDirectories的搜索模式#

C# C中Directory.GetDirectories的搜索模式#,c#,C#,所需搜索说明: Any string that contains either v2 or v3 (case insensitive) 我试图使用Directory.GetDirectories(path,searchPattern)查找子目录路径,我打算为searchPattern参数提供regex模式,但显然,searchPattern不能是regex表达式 有没有其他好方法可以过滤包含v2或v3的文件名?目录。GetDirectories不支持正则表达式,因此不能使用它 我会用这个来代替

所需搜索说明:

Any string that contains either v2 or v3 (case insensitive)
我试图使用Directory.GetDirectories(path,searchPattern)查找子目录路径,我打算为searchPattern参数提供regex模式,但显然,searchPattern不能是regex表达式


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

目录。GetDirectories
不支持正则表达式,因此不能使用它

我会用这个来代替:

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

Directory.GetDirectories
不支持正则表达式,因此不能使用它

我会用这个来代替:

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

如果要使用正则表达式并避免多次扫描目录列表(以减少必要的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();

如果要使用正则表达式并避免多次扫描目录列表(以减少必要的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();

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

一个过滤器:

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

DirectoryInfo di = new DirectoryInfo(@"d:\sources\");
DirectoryInfo[] dirs = di.GetDirectories("*", SearchOption.AllDirectories)
  .Where(q => q.Name.Equals("name1", StringComparison.InvariantCultureIgnoreCase) ||
              q.Name.Equals("name2", StringComparison.InvariantCultureIgnoreCase));

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

一个过滤器:

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

DirectoryInfo di = new DirectoryInfo(@"d:\sources\");
DirectoryInfo[] dirs = di.GetDirectories("*", SearchOption.AllDirectories)
  .Where(q => q.Name.Equals("name1", StringComparison.InvariantCultureIgnoreCase) ||
              q.Name.Equals("name2", StringComparison.InvariantCultureIgnoreCase));

调用
Directory.GetDirectories(baseDir).Where(d=>Regex.IsMatch(d,“v[23]”)
这样就不会枚举两次目录内容了,效率会稍高一些吗?这取决于目录的数量。如果有数千个目录需要检索,并且只有两个目录需要检索,那么这也同样有效。您的答案会同时过滤大小写吗?它似乎只过滤小写字母Windows在文件名方面没有大小写。因此不需要进行大小写检查@djskj189@DanWilson如果您有许多目录,那么最好也编译一次regex,这样就不会对每个目录再次进行解释。调用
directory.GetDirectories(baseDir).Where(d=>regex.IsMatch(d,“v[23]”)不是更有效一点吗
所以您没有两次枚举目录内容?取决于目录的数量。如果有数千个目录需要检索,并且只有两个目录需要检索,那么这也同样有效。您的答案会同时过滤大小写吗?它似乎只过滤小写字母Windows在文件名方面没有大小写。因此不需要进行大小写检查@djskj189@DanWilson如果您有许多目录,那么最好也编译一次正则表达式,这样就不会对每个目录再次进行解释。