我有一个函数,它假设返回指定范围内的文件大小,但是,它通过目录中的所有文件,而不是日期范围之间的文件,使用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);
}
答案 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文件夹,并没有过滤文件):
我使用上面的代码来过滤超过2个月,并使用“GetAll”来比较2并确保它有效 - 相信我,我做了确定它确实:)
希望这有帮助!