我想选择所有在星号为:精确为4个“未知”字符的文档(例如,“ ****”可以为“ 2018”)>
foreach (string s in Directory.GetFiles(@"C:\Users\MyUser\Documents\ExampleTitle ****.xml").Select(Path.GetFileName))
{
// Do something!
}
我知道星号*会匹配每个字符,无论星号之间有多少个字符。但是如上所述,我只想选择带有特定数量未知字符的结果。
答案 0 :(得分:2)
您不能在path参数中指定通配符,需要提供路径和搜索模式,请参见GetFiles(String, String)
。
搜索模式接受两个通配符,?
表示单个字符,*
表示任意数量的字符。因此,您需要
Directory.GetFiles(@"C:\Users\MyUser\Documents", "ExampleTitle ????.xml")
如果您打算只匹配数字,则必须使用正则表达式来过滤Directory.GetFiles
的结果:
var fileList = Directory.GetFiles(@"C:\Users\MyUser\Documents", "*.xml")
.Where(p => Regex.IsMatch(Path.GetFileName(p), @"^ExampleTitle [0-9]{4}\.xml$"))
.ToList();
在这里,Directory.GetFiles(@"C:\Users\MyUser\Documents", "*.xml")
将获取给定文件夹中的所有XML文件,然后将与ExampleTitle <4-DIGITS>.xml
子句一起返回完全匹配Where
模式的XML文件。