通配符返回多个项目EnumerateFiles。需要更具体

时间:2013-08-13 20:47:19

标签: c# enumeration

我有一个pdfs目录。

我需要根据一个数字来获取这些pdf,目前有这个:

var complianceFiles = System.IO.Directory.EnumerateFiles(complianceDocumentPath, salesOrder.CustomerNumber + "*.*", System.IO.SearchOption.TopDirectoryOnly);

如果我有两个包含类似客户编号的客户(即1234和12345),则返回两者。我应该注意,这些文件包含数字,以及唯一的标题。

我知道问题出在我的搜索模式上,感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

您可以将搜索模式与LINQ:

结合使用
var complianceFiles = System.IO.Directory.EnumerateFiles(
    complianceDocumentPath,
    salesOrder.CustomerNumber + "*.pdf", 
    System.IO.SearchOption.TopDirectoryOnly
    ).Where(path => Path.GetFileName(path)
        .TakeWhile(Char.IsDigit).Count() == 
            Math.Ceiling(Math.Log10(salesOrder.CustomerNumber)));

检查文件名中的连续数字是否正好是salesOrder.CustomerNumber的长度。

答案 1 :(得分:1)

EnumerateFiles仅支持*和?作为通配符。 *表示零个或多个字符。 ? - 只有一个角色。

http://msdn.microsoft.com/library/dd413233.aspx

如果您想更具体,请尝试@CodeBeard解决方案。

答案 2 :(得分:1)

我建议不要试图在那时过滤文件名,而是建议使用Linq过滤它们。这样,您可以更轻松地使用正则表达式匹配来过滤文件名。

的伪代码:

var wantedfiles = Directory.EnumerateFiles(complianceDocumentPath,"*.*",etc...)
                  .Where(f=>Regex.Match(f.Name,"pattern with salesOrder.CustomerNumber"))