2014-01-23 35 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只是一個空字符串,並且您正在搜索當前目錄,那麼您的代碼就可以工作。