【问题标题】:Different dates in directory目录中的不同日期
【发布时间】:2016-05-27 08:45:39
【问题描述】:

如果有一个目录,其中包含在不同日期创建的文件。我想知道日期。

是否可以使用 linq 查询来执行此操作,或者我必须先读取所有文件并使用 foreach 循环来获取日期。

例子:

列表 =

File_1  6/03/2016
File_2  6/03/2016
File_3  6/03/2016
File_4  6/03/2016
File_5  15/04/2016
File_6  21/04/2016
File_7  21/04/2016
File_8  21/04/2016

结果 =

6/03/2016
15/04/2016
21/04/2016

谢谢

【问题讨论】:

  • 不清楚日期是文件中,还是只是文件系统条目。你有没有尝试过?
  • 你需要获取文件属性,我在副本中展示了如何做到这一点:DateTime CreatedDate = Convert.ToDateTime(GetSpecificFileProperties(filePath, 4)); 另一种方法是使用FileInfo.GetCreationTime 和另一种方法是 DOS 命令dir
  • 在该重复问题的任何答案中都没有 linq 查询,而且答案使用的 shell 对于 OP 的问题来说是完全矫枉过正(而且是不必要的)。
  • @KrisMatele 我现在无法正确回答这个问题,因为它已关闭,但是如果您想使用 Linq 获取所有最后修改时间的列表,您只需要:var dateInfo = Directory.EnumerateFiles(directoryName).Select(filename => new FileInfo(filename)).Select(info => new {info.Name, info.LastWriteTime});。这将为您提供可以使用 foreach 的东西 - 列表中的每个项目都有一个 Name 和一个 LastWriteTime 属性。
  • @MatthewWatson 我重新打开了,他希望创建日期不是最后一次写入

标签: c# wpf directory


【解决方案1】:

基于@MatthewWatson 的评论。

我做了以下 linq 声明

var dateInfo = Directory.EnumerateFiles(Dir).Select(filename => new FileInfo(filename)).Select(i => new { i.LastWriteTime }).GroupBy(g => g.LastWriteTime.Date);

这样我就可以获得目录中使用的所有不同日期。

【讨论】:

    【解决方案2】:

    显然,如果不对其进行迭代,您将无法处理日期列表,但您可以首先使用 Linq 生成序列,如下所示:

    var dateInfo =
        Directory.EnumerateFiles(directoryName)
        .Select(filename => new FileInfo(filename))
        .Select(info => new {info.Name, info.CreationTime});
    

    这将为您提供FullName/CreationTime 对的列表,其中FullName 是文件的完整路径,CreationTime 是文件的创建时间。

    你可以这样处理:

    foreach (var item in dateInfo)
        Console.WriteLine($"{item.FullName} created on {item.CreationTime}");
    

    如果您只想要创建文件的(唯一)日期:

    var uniqueDates = dateInfo.GroupBy(x => x.CreationTime.Date).Select(y => y.Key);
    
    foreach (var date in uniqueDates)
        Console.WriteLine(date);
    

    最后,如果您需要订购日期:

    var uniqueDates = 
        dateInfo.GroupBy(x => x.CreationTime.Date)
        .Select(y => y.Key)
        .OrderBy(z => z);
    

    (当然,倒序使用.OrderByDescending()。)

    如果您更喜欢 Linq 查询语法:

    var uniqueDates =
        from    date in dateInfo
        group   date by date.CreationTime.Date into g
        orderby g.Key
        select  g.Key;
    

    或者将整个内容放在一个 Linq 查询中(这里可能有点难以理解,因此您可能希望将其保留为单独的查询,但这是为了完整性):

    var uniqueDates =
        from date in
            from file in Directory.EnumerateFiles(directoryName)
            select new FileInfo(file).CreationTime
        group date by date.Date into g
        orderby g.Key
        select g.Key;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2021-08-29
      • 2015-05-20
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多