2017-02-23 94 views
1

對於這個問題,我提前表示歉意,但是我遲到了,並且我很累。我有一個簡單的問題需要解決,但我不能拿出答案。我有兩個標準: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(); 

此錯誤列於Lambda表達式的CREATIONTIME部件,該錯誤是:字符串不包含一個定義爲「CreationTime'and沒有擴展方法‘CREATIONTIME’接受型的第一參數‘字串’能被發現。

就像我說的,我知道這個必須簡單,我只是無法弄清楚。任何幫助都感激不盡。

+0

難道你不能'a.CreationTime.Date = DateTime.Now.Date'? –

+0

'fooDay'是一個字符串,'CreationTime.Year'不是。您無法將它們與'=='進行比較 – Guy

+0

問題是,對a.CreationTime的引用給我提供了我在原始描述中列出的錯誤。 –

回答

2

可以使用DirectoryInfo,而不是靜態Directory.GetFiles因爲GetFiles(上DirectoryInfo)returnes的FileInfo[]而不是string[]

使用方法如下:

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

您也可以縮短你的模式是這樣的:

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

只是比較兩個Date(設置時間成分爲00:00:000兩DateTime對象)。

+0

問題是這個目錄中有很多文件,所以我想盡量減少循環。如果info.GetFiles給了我一些方法來過濾我上面發佈的標準,我很樂意聽到它。 –

+0

試試吧!和'Directory.GetFile()'幾乎相同的選項,你也可以在這裏設置一個'SearchPattern'和一些'SearchOptions'。 –