在DirectoryInfo中搜索字符串

时间:2011-09-15 15:27:28

标签: c# linq directory

我在搜索目录中找到文件名中包含某些条件的文件时遇到了一些麻烦。下面是我的代码,它在大多数时间捕获正确的文件,但有时会跳过它需要捕获的文件。做这个的最好方式是什么?

非常感谢。

所以下面我试图捕获目录中包含“FINAL”和正确Actual_Date字样的所有文件。我有一个名为dtResult2的数据表,其中存储了这些Actual_Dates。

foreach (DataRow drow in dtResult2.Rows)
{          
    //check for Null and start searching if not Null
    if(drow["Well_Name"] != DBNull.Value)
    {
        //Now lets start searching the entire ARCHIVE folder/subfolders for a DWG that has
        //this Well_Name and Actual_Date with FINAL in File Name...

        DirectoryInfo myDir = new DirectoryInfo(myCollection3[v]);  
        //Collect the Final, Approved DWGs only...

        var files = myDir.GetFileSystemInfos().Where(f => f.Name.Contains("FINAL") || f.Name.Contains(drow["Well_Name"].ToString()) || f.Name.Contains(drow["Actual_Date"].ToString()));

        //More code not shown due to premise of question..
    }
}

2 个答案:

答案 0 :(得分:0)

代码没有任何问题,可能是where条件错误。

我可以建议您将其转换为经典的for/foreach,它允许您调试条件并且性能更高。一旦识别出错误,您甚至可以将其转换回LINQ表达式

答案 1 :(得分:0)

最有可能的问题在于使用区分大小写的Contains方法:

f.Name.Contains("FINAL")与“最终”不匹配,匹配“FINAL”。

使用IndexOf可获得case insensitive comparisons的更好结果。