2011-09-15 15 views
1

ファイル名に特定の基準を持つファイルのディレクトリを検索する際に問題があります。以下は私のコードであり、ほとんどの場合正しいファイルをキャプチャしますが、キャプチャする必要があるファイルをスキップすることがあります。これを行う最善の方法は何ですか?DirectoryInfoの文字列を検索する

多くのありがとうございます。

私はディレクトリ内の "FINAL"という単語と正しいActual_Dateを持つすべてのファイルをキャプチャしようとしています。私はこれらのActual_Datesが格納されているdtResult2というデータテーブルを持っています。

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.. 
    } 
} 
+0

containsの代わりに等しくする。 –

+0

検索パターンについては、このリンクもチェックしてください。http://msdn.microsoft.com/en-us/library/8he88b63.aspx –

答えて

0

おそらくwhereの条件が間違っています。

これを古典的なfor/foreachに変換することをお勧めします。条件をデバッグすることができ、さらに性能が向上します。

f.Name.Contains("FINAL")は、「ファイナル」は一致しません:あなたも、すぐにあなたが

0

ほとんどの問題は、大文字と小文字が区別されContains法を用いてあるバグを特定してきたように、バックLINQ式に変換することができますと一致するのは "FINAL"です。

case insensitive comparisonsの方が良い結果を得るには、IndexOfを使用してください。