目录中的不同日期

时间:2016-05-27 08:45:40

标签: c# wpf directory

如果目录中包含在不同日期创建的文件。我想得到约会。

是否可以使用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

由于

2 个答案:

答案 0 :(得分:0)

显然你不能在没有迭代的情况下处理日期列表,但是你可以使用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;

答案 1 :(得分:0)

根据@MatthewWatson的评论。

我已经制作了以下linq语句

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

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