2014-01-23 34 views
1

在下面的C#方法中,我知道Directory.GetFileNsmes()确实返回文件列表。而且,我可以在Where contains(contact)中添加哪些作品。然而,对于我的生活,我无法确定为什么searchPatter.IsMatch()无法找到文件。我已经测试了http://regexpal.com/中的模式,并且如预期的那样进行了排列。 namePattern是“^ \ d {3}(。*)。pdf”,应该有一个匹配。.net linq与正则表达式ismatch在哪里

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(); 
} 

如果这已经在某个地方回答了,请让我知道,但我一直无法找到它。我认为这非常简单直接。

回答

4

Directory.GetFiles将返回填充文件路径,这将是Drive\Directory\File.ext。这就是为什么你的模式看起来不匹配。您只需要FileName作为主题。尝试这种

var files = Directory.GetFiles(pathName) 
       .Where(f => searchPattern.IsMatch(Path.GetFileName(f))); 
1

Directory.GetFiles()返回附加到作为参数提供的路径的文件名列表。您的正则表达式是“^ \ d {3}(。*)。pdf”,即以三位数开头的字符串。如果你提供了一个绝对路径的字符串,它将以Unix上的“/”或Windows上的“C:\”开始,如果它是相对路径,它将以目录名称开始。如果pathName只是一个空字符串,并且您正在搜索当前目录,那么您的代码就可以工作。