尝试使用LINQ按创建日期获取目录中的文件列表

时间:2012-02-21 22:48:51

标签: c# linq

我试图通过写日期获取目录中所有文件的列表:

private void Form1_Load(object sender, EventArgs e) {
  DateTime LastCreatedDate = 
               Properties.Settings.Default["LastDateTime"].ToDateTime();

  string [] filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv")
                        .OrderBy(p => System.IO.File.GetLastWriteTime(p))
                        .Where(p>=LastCreatedDate);
}

问题

  1. 如何正确执行WHERE子句以仅获取大于或等于我设置中日期的文件?
  2. string []不适合这个,因为它不知道如何进行转换。我应该使用哪种数据类型?

3 个答案:

答案 0 :(得分:2)

您是否有任何理由不使用DirectoryInfo而不是Directory - 这样可以节省您必须将文件路径解析回Files以获取日期,或者存储日期在一个单独的变量中:

DateTime lastCreatedTime = new DateTime(2012, 01, 30, 05, 12, 00);

var files = new DirectoryInfo(@"\\Pontos\completed\").GetFiles("*_*.csv")
            .Where(f => f.LastWriteTime >= lastCreatedTime)
            .OrderBy(f => f.LastWriteTime)
            .Select(f => new {f.FullName});

foreach (var file in files) {
  Console.WriteLine(file.FullName);
}

答案 1 :(得分:1)

未经测试但应该有效:

private void Form1_Load(object sender, EventArgs e)
{
    DateTime LastCreatedDate = Properties.Settings.Default["LastDateTime"].ToDateTime();
    var filePaths = Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv").Select(p => new {Path = p, Date = System.IO.File.GetLastWriteTime(p)})
        .OrderBy(x=>x.Date)
        .Where(x=>x.Date>=LastCreatedDate);

}

答案 2 :(得分:1)

你可以这样做:

Directory.GetFiles(@"\\Pontos\completed\", "*_*.csv")
         .Select(p => new { FileName = p, Modified = System.IO.File.GetLastWriteTime(p) })
         .Where(p => p.Modified > LastCreatedDate)
         .OrderBy(p => p.Modified);
相关问题