我正在根据创建时间戳过滤要删除的文件.使用文件创建的代码段工作正常,只是这些文件嵌入了与创建时间不同的时间戳.这会导致一堆文件被删除.

这就是我目前使用的:

public static void DeleteLogFiles(string sPath, DateTime dtDate, int iLogFileRetention)
{
    try
    {
        (from f in new DirectoryInfo(sPath).GetFiles()
            where f.CreationTime < dtDate.Subtract(TimeSpan.FromDays(iLogFileRetention))
            select f
            ).ToList()
            .ForEach(f => f.Delete());
    }
    catch (Exception ex)
    {
    }
}

文件名中嵌入的时间戳格式为MMddyyyyyHHmmss.

ABCD_20240309000024.dat, but its last modified date is 03/12/2024

我如何修改上面的Linq语句以使用嵌入的时间戳而不是创建/修改的日期?

where f.FileName ?????

推荐答案

使用以下助手方法

static DateTime GetDateTime(string strTimestamp)
{
    // ABCD_20240309000024.dat
    string fileName = Path.GetFileNameWithoutExtension(strTimestamp);
    string[] parts = fileName.Split("_");
    string dateTimePart = parts[1];
    DateTime dateTime = DateTime.ParseExact(dateTimePart, "yyyyMMddFFFFFF", CultureInfo.InvariantCulture);
    return dateTime;
}

并将Linq更改如下:

(from f in new DirectoryInfo(sPath).GetFiles()
    where (f.CreationTime < dtDate.Subtract(TimeSpan.FromDays(iLogFileRetention))
    || GetDateTime(f.Name) < dtDate.Subtract(TimeSpan.FromDays(iLogFileRetention)))
    select f
    ).ToList()
    .ForEach(f => f.Delete());

请注意,我使用的日期时间格式yyyyMMdd,您可能需要更改.

Csharp相关问答推荐

使用其可能实现的基类和接口的属性的方法

如何使用C#和Graph API从Azure Directory获取用户详细信息

EF Core判断是否应用了AsSplitQuery()

ASP.NET核心结果.文件vs结果.流

WPF Windows初始化正在锁定. Net 8中分离的线程

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

使用命令初始化可绑定属性

与C#中的Zip列表并行

为什么SignalR在每个Blazor服务器应用程序启动时最多启动8个服务器?

从ASP.NET Core中的枚举字段填充 Select 选项时,将默认的第一个选项添加为 Select 元素

当用户右键单击文本框并单击粘贴时触发什么事件?

如何通过属性初始化器强制初始化继承记录内的属性?

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

Blazor Server.NET 8中的Blazore.FluentValidation问题

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

流畅的验证--如何为属性重用规则?

如何在特定时间间隔运行多个后台任务?

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

在C#中通过Matheval使用自定义公式

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到