0

我有一个pdf目录。

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

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

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

我知道问题出在我的搜索模式上,不胜感激。

4

3 回答 3

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.

于 2013-08-13T21:01:41.053 回答
1

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

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

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

于 2013-08-13T20:52:32.877 回答
1

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

伪代码:

var wantedfiles = Directory.EnumerateFiles(complianceDocumentPath,"*.*",etc...)
                  .Where(f=>Regex.Match(f.Name,"pattern with salesOrder.CustomerNumber"))
于 2013-08-13T20:52:57.610 回答