2014-04-19 87 views
5

用下面的代碼創建日期,我可以合併存在於一個目錄過濾器文件通過使用C#

var allLines = Directory.GetFiles(directory, "*.txt") 
         .SelectMany(f => File.ReadLines(f)); 
File.WriteAllLines(outputFileName, allLines); 

如何修改它來合併文件,其最新創作是今天的文本文件?

DirectoryInfo info = new DirectoryInfo(""); 
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray(); 

我該如何組合這段代碼?

回答

3
DirectoryInfo info = new DirectoryInfo(directory); 

var allLines = info.GetFiles("*.txt") 
        .Where(p => p.CreationTime.Date == DateTime.Today) 
        .OrderBy(p => p.CreationTime) 
        .SelectMany(p => File.ReadAllLines(p.FullName)); 

File.WriteAllLines(outputFileName, allLines); 
0

試試這個:

var allLines = Directory.GetFiles(directory, "*.txt") 
    .Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date) 
    .SelectMany(f => File.ReadLines(f)); 
+0

DateTime.Now表示正好現在,不是 「今天」 – Andrew

+0

我已經改變了它 – Dunken

+0

@SriramSakthivel ,你是對的,但它是'p.CreationTime == DateTime.Now'之前 – Andrew

4

使用File.GetCreationTime方法:

var allLines = Directory.EnumerateFiles(directory, "*.txt", SearchOption.TopDirectoryOnly) 
         .Where(path => File.GetCreationTime(path).Date == DateTime.Today) 
         .SelectMany(f => File.ReadLines(f)); 
+2

'EnumerateFiles'會比'GetFiles'更好使用 – Sayse

+0

是的,對,它開始枚舉更快,不會等待所有文件被檢索,因爲它是IEnumerable。錯過了那個,只是跟着這個問題。 – Andrew