通配符返回多个项目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),则返回两者。我应该注意的是,这些文件包含编号以及唯一的标题。
我知道问题出在我的搜索模式上,任何帮助都将不胜感激。
您可以将搜索模式与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
的长度。
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"))