【问题标题】:How to get all Directories from folder with by date range?如何按日期范围从文件夹中获取所有目录?
【发布时间】:2013-12-29 14:10:15
【问题描述】:

我需要从具有日期范围的特定文件夹中获取所有目录,例如:

StartDate

我正在尝试使用GetDirectories 方法进行过滤,但没有运气:

RootDirInfo.GetDirectories()
     .Where(x => new DirectoryInfo(x).CreationTime.Date == DateTime.Today.Date);

【问题讨论】:

  • 出了什么问题?得到任何错误?如果有,是哪个?

标签: c# .net c#-4.0 datetime directory


【解决方案1】:

让我将其拆分为函数以使其更清晰(并且您不会创建多个对象):

private static bool IsInRange(DateTime time, DateTime min, DateTime max)
{
    return time >= min && time <= max;
}

现在使用 LINQ,您可以简单地编写:

public static IEnumerable<DirectoryInfo> GetDirectories(
    DirectoryInfo directory,
    DateTime startDate,
    DateTime endDate)
{
    return directory.GetDirectories()
        .Where(x => IsInRange(x.CreationTime, startDate, endDate));
}

如果你想要它紧凑:

public static IEnumerable<DirectoryInfo> GetDirectories(
    DirectoryInfo directory,
    DateTime startDate,
    DateTime endDate)
{
    return directory.GetDirectories()
        .Where(x => x.CreationTime >= startDate && x.CreationTime <= endDate);
}

最后说明:你正在做new DirectoryInfo(x),但它错了,因为我想RootDirInfoDirectoryInfo,然后GetDirectories() 将返回DirectoryInfo[] 准备使用(请参阅我的最后一个代码sn-p)。

【讨论】:

    【解决方案2】:

    System.DateTime 类型确实支持运算符 &gt;=&lt;=,因此您可以使用它们进行比较:

    RootDirInfo.GetDirectories()
        .Where(x => x.CreationTime >= startDate && new x.CreationTime <= endDate);
    

    【讨论】:

    • 'System.IO.DirectoryInfo.DirectoryInfo(string)' 的最佳重载方法匹配有一些无效参数
    • @the_farmer 我不小心使用了您的代码而没有检查,请参阅编辑以了解正确的方法。我忘记了 GetDirectories() 返回 DirectoryInfo 本身,而不是路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多