2017-02-23 11 views
1

私は前もってこのことをお詫びしますが、私がいるところでは遅く、疲れています。解決するのは簡単な問題ですが、答えを思いつくことはできません。私は2つの基準があります:1)ファイル名が特定の基準と一致するディレクトリ内のファイルを探し、2)今日の作成時間を持つファイルのみを考慮します。これらの基準の両方についての記事はたくさんありますが、それらをまとめているものはありません。私が一緒にマッシュしたコードはここにあります(私にはうれしいです)。ラムダ式でのファイル検索

string fooDay = DateTime.Now.ToString("dd"); 
string fooMonth = DateTime.Now.ToString("MM"); 
string fooYear = DateTime.Now.ToString("yyyy"); 
List<string> T340Basics = new List<string>(); 
T340Basics = Directory.GetFiles(@"\\10.0.0.73\shared\340B\340Basics\OUT\out_archive", @"340B_Captured_Claim_File*.txt").Where(a => (a.CreationTime.Month == fooMonth && a.CreationTime.Day == fooDay && a.CreationTime.Year == fooYear)).ToList(); 

ラムダ式のCREATIONTIME部品にこのエラーが出て、エラーがある:string 『は文字列『タイプの最初の引数を受け入れる』CREATIONTIME可能性「は拡張メソッドをCreationTime'andない』の定義が含まれていません。見つけられた。

私が言ったように、私はこれが単純でなければならないことを知っています、私はそれを理解できません。どんな助けでも大歓迎です。

+0

あなたは 'a.CreationTime.Date = DateTime.Now.Date'を実行できませんか? –

+0

'fooDay'は文字列、' CreationTime.Year'は文字列ではありません。 '==' – Guy

+0

と比較することはできません。問題は、a.CreationTimeへの参照が私のオリジナルの記述に記載されているエラーを与えることです。 –

答えて

2

代わりstring[]FileInfo[]をreturnes(DirectoryInfo上)GetFilesので、あなたは代わりに静的Directory.GetFilesDirectoryInfoを使用することができます。

このようにそれを使用します。

DirectoryInfo info = new DirectoryInfo(@"\\10.0.0.73\shared\340B\340Basics\OUT\out_archive"); 

if(info.Exists) 
{ 
    info.GetFiles(@"340B_Captured_Claim_File*.txt", <OptionalSearchOption>).Where(file => file.CreationDate.Date == DateTime.Now.Date).ToList(); 
} 

ます。また、このようなあなたのパターンを短くすることができます:00:

file => file.CreationDate.Date == DateTime.Now.Date 

わずか2つの日付を比較するには、(00時間コンポーネントを設定し、両方で000 DateTimeオブジェクト)。

+0

問題は、このディレクトリにかなりの数のファイルがあるので、私はループを最小限に保ちたいと思っていました。 info.GetFilesが私が上記の私の基準をフィルタリングする何らかの方法を与えるなら、それについて聞いてみたいと思います。 –

+0

ただ試してみてください! 'Directory.GetFile()'とほぼ同じオプションがあります。ここでも 'SearchPattern'と' SearchOptions'を設定することもできます。 –