namespace BLAIzor.Services { using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System.IO; using System.Threading; using System.Threading.Tasks; public class TempFileCleanupService : BackgroundService { private readonly ILogger _logger; private readonly string _tempDirectory; private readonly TimeSpan _checkInterval = TimeSpan.FromMinutes(30); private readonly TimeSpan _fileLifetime = TimeSpan.FromHours(1); public TempFileCleanupService(ILogger logger, IWebHostEnvironment env) { _logger = logger; _tempDirectory = Path.Combine(env.WebRootPath, "temp"); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("TempFileCleanupService started."); while (!stoppingToken.IsCancellationRequested) { try { if (Directory.Exists(_tempDirectory)) { var now = DateTime.UtcNow; var files = Directory.GetFiles(_tempDirectory, "style_*.css"); foreach (var file in files) { var fileInfo = new FileInfo(file); if (now - fileInfo.LastWriteTimeUtc > _fileLifetime) { fileInfo.Delete(); _logger.LogInformation($"Deleted old temp file: {fileInfo.Name}"); } } } } catch (Exception ex) { _logger.LogError(ex, "Error occurred during temp file cleanup."); } await Task.Delay(_checkInterval, stoppingToken); } _logger.LogInformation("TempFileCleanupService stopped."); } } }