根据所选日期范围返回文件大小

时间:2016-05-09 21:16:45

标签: c#

我有一个函数,它假设返回指定范围内的文件大小,但是,它通过目录中的所有文件,而不是日期范围之间的文件,使用linq方法:这是这样做的正确方法?

public static long fileSize(string source_path)
{
     return new DirectoryInfo(source_path)
             .EnumerateFiles("*.SS*")
             .Where(file => file.CreationTime < dt.AddMonths(-2))
             .Sum(file => file.Length);
}

1 个答案:

答案 0 :(得分:1)

好的,所以我花了一点时间试用你的代码。

我看不到为什么它不起作用,所以我将代码分成不同的行。似乎长Linq功能本身就令人困惑。

以下是对我有用的。

它与您之前所做的基本完全相同,只是将一些局部变量声明为路径点,以确保事物在某些点上应该如此:

public static long FileSize(string path)
{
    var di = new DirectoryInfo(path);
    var allFiles = di.EnumerateFiles(); // Enter your filter "*.SS" or whatever

    var beforeDate = DateTime.Now.AddMonths(-2);

    var olderThan2Months = allFiles.Where(x => x.CreationTime < beforeDate);

    return olderThan2Months.Sum(x => x.Length);
}

这对我来说很有魅力(显然你可以将变量更改为更有意义的名字)。

以上是上述代码的示例截图 (我只使用了Downloads文件夹,并没有过滤文件):

Sample screenshot!

我使用上面的代码来过滤超过2个月,并使用“GetAll”来比较2并确保它有效 - 相信我,我做了确定它确实:)

希望这有帮助!