2016-05-04 81 views
0
DirectoryInfo info = new DirectoryInfo(Directory Name); 
//... Other code 
var allLines = info.GetFiles("*.dat") 
          .Where(p => p.CreationTime.Date ==DateTime.Today.Date) 
          .SelectMany(p => File.ReadAllLines(p.FullName)); 

我想獲取今天創建的文件。但是通過這段代碼,我得到了超過3個月的文件夾中的所有.dat文件。任何幫助!新手在C#基於日期過濾文件夾文件

+0

請提供更多信息。什麼是'信息'? –

+0

DirectoryInfo info = new DirectoryInfo(Directory Name) –

+1

這可能是一個想法做分離的擔憂,所以你可以更好地調試它: 'var todayFiles = info.GetFiles(「*。dat」) .Where(p => p.CreationTime.Date == DateTime.Today.Date);' 然後: 'VAR allLines = todayFiles.SelectMany(p值=> File.ReadAllLines(p.FullName));' 然後就可以檢查你的集合'todayFiles'並確認'CreationTime'屬性設置正確 – Draken

回答

0

試試這個

我從你提供的LINQ瞭解什麼是你想要的類型的.dat,其創建日期爲今天做寫操作的文件。

var allLines = info.GetFiles("*.dat") 
         .Where(p => p.CreationTime.Date > DateTime.Today.Date.AddMinutes(-1)) 
         .SelectMany(p => File.ReadAllLines(p.FullName)); 
+0

這並不能解釋爲什麼'=='操作符不起作用,似乎很奇怪'''在這種情況下工作,而不是'==' – Draken

+0

DateTime。 Today.Date將返回日期:{5/4/2016 12:00:00 AM}。看看時間。在你的情況下,文件在上午12點以後創建。這意味着你在日期+時間==。因此,我所做的是減1天,日期將爲{5/3/2016 12:00:00 AM},因此今天創建的文件總是會比昨天更大。 – Sid

+0

@Draken這種技術不是使用CreationTime.Date來忽略這種情況下的時間組件,它應該是無用的 – MikeT

0

看起來你:

.SelectMany(p => File.ReadAllLines(p.FullName)); 

是錯誤的。

爲什麼不使用只是:

info.GetFiles("*.dat").Where(p => p.CreationTime.Date == DateTime.Today.Date).Select(p => p.FullName); 

,你會得到的文件

+1

,因爲他想要的文件的內容不是文件的名稱 – MikeT

+0

看起來像他的代碼工程確定 – Dmitry

+0

同意,代碼似乎很好,這表明問題是目錄和文件本身 – MikeT

0

代碼工作正常的列表。唯一的是,我不得不刪除以前的編譯/調試文件,它不涉及日期過濾。因此,即使乾淨的解決方案&重建解決方案已經完成,也是一樣的。