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如果您有许多目录,那么最好也编译一次正则表达式,这样就不会对每个目录再次进行解释。