只查找最近X天的文件

本文关键字:文件 查找 最近 | 更新日期: 2023-09-27 17:49:31

我想搜索目录并找到最近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天内创建(days变量):

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

只查找最近X天的文件

基于以下语句:

目前我的函数返回所有时间相同的文件(谁创建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;
}

这可以在您正在寻找的Date值中使用linq pass来完成

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

如果您的时间范围超过两天,则将包括两天前创建的文件。没关系,因为"四天"实际上可以翻译成[现在的4d ..]现在)

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

注意fileInfo。createtime和fileInfo。LastWriteTime在很多情况下是不同的。您可能需要过滤LastWriteTime