C# 要仅查找X最近几天中的文件吗

C# 要仅查找X最近几天中的文件吗,c#,winforms,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)

我想搜索目录并查找过去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天内创建(天变量):


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

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

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

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

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

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

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

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

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

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

基于以下语句:

当前我的函数返回所有时间相同的文件(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;
    }            
}
我相信你要做的是改变这一行:

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;
}
public bool checkFileCreationDate(FileInfo fileInfo)
{
    double num = (double)nudDays.Value;
    if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalDays == num)
    {
        return true;
    }

    return false;
}

根据这一说法:

当前我的函数返回所有时间相同的文件(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;
    }            
}
我相信你要做的是改变这一行:

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;
}
public bool checkFileCreationDate(FileInfo fileInfo)
{
    double num = (double)nudDays.Value;
    if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalDays == num)
    {
        return true;
    }

    return false;
}

我会用另一种方法:
if(DateTime.Now.Subtract(fileInfo.CreationTime)
这样,当使用
decimal.MaxValue
时,就不会出现奇怪的问题。你确定有文件应该返回
true
但没有?您已经完成了吗?使用checkFileCreationDate方法中的断点进行调试!嗯,你发布的代码中几乎没有关键的逻辑。虽然我不喜欢将你的日子存储为
decimal
类型,然后将其转换为
double
,除此之外,我也看不出你发布的逻辑中有任何具体缺陷,同时,并确保你认为正在发生的一切都是真实发生的,我会用另一种方式来做:
if(DateTime.Now.Subtract(fileInfo.CreationTime)
,当使用
decimal.MaxValue
时,您不会遇到奇怪的问题。是否确实存在应返回
true
但不返回的文件?您已经完成了吗?使用checkFileCreationDate方法中的断点进行调试!嗯,你发布的代码中几乎没有关键的逻辑。虽然我不喜欢将你的日子存储为
十进制
类型,然后将其转换为
双精度
等等,但我看不出你所发布的逻辑中有任何具体的缺陷,同时,确保你认为正在发生的一切都是你想要的,我们将从那里向后工作。我只想接收在上一个x中创建的文件days@user1269592:那么,如果您在控件中提供了一个数字(6),您是否希望在过去6天内创建任何文件?换句话说,如果文件是在1天前创建的,那么它也会被包括在内,但是如果文件是在6天前创建的,那么它也会被包括在内?是的,这是正确的,尽管它不必与新代码同时精确(第一种方法)从今天起没有返回任何文件,即使我的x天是1天、2天或更大,您到底想要什么,我们将从那里向后工作。我只希望收到在上一个x天创建的文件days@user1269592:那么,如果您在控件中提供了一个数字(6),您是否希望在过去6天内创建任何文件?换句话说,如果文件是在1天前创建的,那么它也会被包括在内,但是如果文件是在6天前创建的,那么它也会被包括在内?是的,这是真的,尽管它不必是精确的,只是在同一时间,新代码(第一个方法)从今天起没有返回任何文件,即使我的x天是1天或2天或更大