我有一个pdfs目录。
我需要根据一个数字来获取这些pdf,目前有这个:
var complianceFiles = System.IO.Directory.EnumerateFiles(complianceDocumentPath, salesOrder.CustomerNumber + "*.*", System.IO.SearchOption.TopDirectoryOnly);
如果我有两个包含类似客户编号的客户(即1234和12345),则返回两者。我应该注意,这些文件包含数字,以及唯一的标题。
我知道问题出在我的搜索模式上,感谢任何帮助。
答案 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"))