在下面的C#方法中,我知道Directory.GetFileNsmes()确实返回了文件列表。并且,我可以添加Where contains(联系人)。但是对于我的生活,我无法确定searchPatter.IsMatch()无法找到文件的原因。我已经在http://regexpal.com/测试了模式,并按预期进行了测试。 namePattern是“^ \ d {3}(。*)。pdf”并且应该匹配。
public static List<string> GetFileNames(string pathName, string namePattern, string contact)
{
var searchPattern = new Regex(namePattern, RegexOptions.IgnoreCase);
var files = Directory.GetFiles(pathName).Where(f => searchPattern.IsMatch(f));
//.Where(f => f.Contains(contact));
return files.ToList();
}
如果已在某处已经回答,请告诉我,但我找不到它。我认为这很简单直接。
答案 0 :(得分:4)
Directory.GetFiles
将返回填充文件路径,该路径为Drive\Directory\File.ext
。这就是为什么你的模式似乎不匹配的原因。您需要FileName
单独作为主题。试试这个
var files = Directory.GetFiles(pathName)
.Where(f => searchPattern.IsMatch(Path.GetFileName(f)));
答案 1 :(得分:1)
Directory.GetFiles()返回附加到作为参数提供的路径的文件名列表。你的正则表达式是“^ \ d {3}(。*)。pdf”,这是一个以三位数开头的字符串。如果你提供了一个绝对路径的字符串,它将在Unix上以“/”或Windows上的“C:\”开头,如果它是相对路径,它将以目录名开头。如果pathName只是一个空字符串并且您正在搜索当前目录,那么您的代码将起作用。