ASP.NET MVC-System.Threading.Timer-定时清理文件夹
环境:
win10, .NET 6.0,IIS
问题描述
假设我有一个页面,要求上传一个文件,后台收到后存储文件,然后读取、解析、计算,最后将计算结果返回前端,用于绘制图像。但是后台存储的文件,我只想保存24h内的,所以需要考虑自动清理文件。
实现
修改Global.asax.cs文件:
using System.Threading;
public class MvcApplication : System.Web.HttpApplication
{
private static Timer _timer;
public static string DirectoryPath { get; private set; }
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// 设置定时器,每隔1小时执行一次
DirectoryPath = HostingEnvironment.MapPath("~/XXXX");
_timer = new Timer(DeleteOldFiles, null, TimeSpan.Zero, TimeSpan.FromHours(1));
}
private void DeleteOldFiles(object state)
{
var files = Directory.GetFiles(DirectoryPath);
foreach (var file in files)
{
var fileInfo = new FileInfo(file);
if (fileInfo.LastWriteTime < DateTime.Now.AddHours(-24))
{
fileInfo.Delete();
}
}
}
}
复杂的定时任务可以选择Hangfire 或 Quartz.NET。