2016-05-04 20 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

詳細情報をご提供ください。 'info'とは何ですか? –

+0

DirectoryInfo info =新しいDirectoryInfo(ディレクトリ名) –

+1

問題を分けて少しデバッグできるようにすることが考えられます。 'var todayFiles = info.GetFiles(" *。dat ") 。どこか(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はDate:{5/4/2016 12:00:00 AM}を返します。時間を参照してください。あなたの場合、ファイルは午前12時以降に作成されました。つまり、日付+時刻に==を入れていることを意味します。私がやっていることは1日マイナスです。そしてDateは{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

のリストを取得します:

なぜあなたは単に使用していません。唯一の事は、日付フィルタリングを伴わなかった以前のコンパイル済み/デバッグファイルを削除しなければならなかったことです。したがって、清潔なソリューション&リビルドソリューションが実行されたにもかかわらず、同じものを取っていました。