2

我想搜索目录并查找最近 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;
}
4

3 回答 3

2

这可以使用您要查找的日期值中的 linq 传递来完成

Date somedate;
var filterFiles = from file in directoryInfo.GetFiles() 
            where file.CreationTime > somedate
            select file;
于 2012-12-26T19:07:20.300 回答
2

基于此声明:

目前,即使我搜索超过 2 天,我的函数也会始终返回相同的文件(2 天前创建的文件)。

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

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

对此:

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

但是,我不得不承认,您要寻找的确切内容还不是很清楚,所以我希望我的解释正确。

更新

如果您想要在过去n几天内创建的所有文件(即如果n是 6,那么它将返回 1-6 天前的任何文件),然后使用这个:

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;
}
于 2012-12-26T19:24:10.590 回答
0

如果您的时间范围超过两天,则两天前创建的文件将被包括在内。没关系,因为“四天”实际上转化为间隔 [now-4d .. now]

要排除您的测试文件,您必须将天数减少到一。

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

于 2012-12-26T19:08:23.050 回答