using Coravel.Invocable; using System; using System.IO; using System.Threading.Tasks; using VideoAnalysisCore.Common; namespace VideoAnalysisCore.Job { /// /// 每小时强制清理缓存文件夹下所有内容的任务 /// public class ClearAllCacheJob : IInvocable { public Task Invoke() { try { var cacheDir = AppCommon.TaskCachedFile; if (!Directory.Exists(cacheDir)) { return Task.CompletedTask; } Console.WriteLine($"{DateTime.Now} 开始强制清理缓存目录: {cacheDir}"); // 获取所有子目录 var directories = Directory.GetDirectories(cacheDir); var i = 0; foreach (var dir in directories) { try { // 检查文件夹创建时间,如果是30分钟前的则删除(防止删除正在运行的任务) if (Directory.GetCreationTime(dir) < DateTime.Now.AddMinutes(-30)) { Directory.Delete(dir, true); i++; } } catch (Exception ex) { // 正在使用的文件夹会抛出异常,忽略即可 Console.WriteLine($"清理目录 {dir} 时发生错误 (可能正在使用): {ex.Message}"); } } Console.WriteLine($"已删除过期缓存数量 {i}"); // 获取根目录下的散落文件 var files = Directory.GetFiles(cacheDir); foreach (var file in files) { try { if (File.GetCreationTime(file) < DateTime.Now.AddHours(-1)) { File.Delete(file); Console.WriteLine($"已删除过期缓存文件: {file}"); } } catch (Exception ex) { Console.WriteLine($"清理文件 {file} 时发生错误: {ex.Message}"); } } } catch (Exception ex) { Console.WriteLine($"强制清理缓存任务发生异常: {ex.Message}"); } return Task.CompletedTask; } } }