想要在最后几天只查找X中的文件

时间:2012-12-26 18:53:54

标签: c# winforms

我想搜索目录并查找过去x天的文件,目前我的函数一直返回同一个文件(2天前创建的人),即使我搜索的时间超过2天。

decimal days = nudDays.Value; 
//read the number from NumericUpDown comtrol

private void setDays() 
//each change in NumericUpDown comtrol will change days variable
{
    if (nudDays.Value != 0)
    {
        days = nudDays.Value;    
    }
    else
    {
        days = decimal.MaxValue;
    }            
}

检查我的文件是否在过去x天(天变量)中创建:

public bool checkFileCreationDate(FileInfo fileInfo)
{
    double num = (double)nudDays.Value * -1;
    if (fileInfo.CreationTime > DateTime.Now.AddDays(num))
    {
        return true;
    }

    return false;
}

3 个答案:

答案 0 :(得分:2)

这可以使用您要查找的Date值中的linq pass来完成

Date somedate;
var filterFiles = from file in directoryInfo.GetFiles() 
            where file.CreationTime > somedate
            select file;

答案 1 :(得分:1)

基于此声明:

  

目前我的函数一直返回同一个文件(2天前创建的人),即使我搜索的时间超过2天。

我相信你想要做的就是改变这一行:

if (fileInfo.CreationTime > DateTime.Now.AddDays(num))

对此:

if (fileInfo.CreationTime == DateTime.Now.AddDays(num))

但是,我不得不承认,完全并不是那么清楚,所以我希望我能正确理解它。

更新

如果您想要在过去n天内创建的所有文件(即如果n为6,那么它将返回1-6天之前的任何文件),然后使用:< / p>

public bool checkFileCreationDate(FileInfo fileInfo)
{
    double num = (double)nudDays.Value;
    if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalDays <= num)
    {
        return true;
    }

    return false;
}

如果您想要n天以前的所有文件(例如,如果n为6,那么它将返回6天前的任何文件),然后使用:

public bool checkFileCreationDate(FileInfo fileInfo)
{
    double num = (double)nudDays.Value;
    if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalDays == num)
    {
        return true;
    }

    return false;
}

答案 2 :(得分:0)

如果您的时间跨度超过两天,则会包含两天前创建的文件。没关系,因为“四天”实际上转换为[now-4d .. now]

的区间

要排除测试文件,您必须将日期数减少为一个。

请注意,在许多情况下,fileInfo.CreationTime和fileInfo.LastWriteTime是不同的。 您可能希望过滤LastWriteTime。