2014-04-19 85 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