通配符返回多个项目EnumerateFiles.需要更具体一些

本文关键字:返回 项目 EnumerateFiles 通配符 | 更新日期: 2023-09-27 18:27:37

我有一个pdfs目录。

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

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

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

我知道问题出在我的搜索模式上,任何帮助都将不胜感激。

通配符返回多个项目EnumerateFiles.需要更具体一些

您可以将搜索模式与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的长度。

EnumerateFiles仅支持*和?作为通配符。*用于零个或多个字符。?-正好是一个字符。

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

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

与其在此时尝试过滤文件名,我建议稍后使用Linq进行过滤。这样,您可以更容易地使用正则表达式匹配来过滤文件名。

伪代码:

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