在程序运行时打印日志文件时,需要自动删除一些文件,以免硬盘占满。
使用两种方式实现1.Winform自带控件Timer 2.Net作业调度Quartz.Net
第一种方式,使用 Winform自带控件,Timer
从工具箱拖入一个Timer,设置Enabled为True,interval为发生的间隔,写入1000就是一秒执行一次。
双击timer1进入Tick事件
private void timer1_Tick(object sender, EventArgs e) //每隔一段时间触发该函数。
{
DeleteFile("D:/test", 7); //删除该目录下 超过 7天的文件
}
private void DeleteFile(string fileDirect, int saveDay)
{
DateTime nowTime = DateTime.Now;
string[] files = Directory.GetFiles(fileDirect, "*.*", SearchOption.AllDirectories); //获取该目录下所有文件
foreach (string file in files)
{
FileInfo fileInfo = new FileInfo(file);
TimeSpan t = nowTime - fileInfo.CreationTime; //当前时间 减去 文件创建时间
int day = t.Days;
if (day > saveDay) //保存的时间 ; 单位:天
{
File.Delete(file); //删除超过时间的文件
}
}
}
参考:https://www.cnblogs.com/sclu/p/13065820.html
另外一种方式,使用.Net作业调度Quartz.Net
首先:Nuget安装
Install-Package Quartz
自己写一个方法然后在窗体初始化时根据自己需求调用
首先定义一个全局的调度器
private IScheduler _sched;
初始化调度器方法
public static void Initia()
{
//进行判断,调试器是否是开着,防止重复实例化报错
if (_sched != null)
{
if (_sched.IsStarted)
{
_sched.Shutdown();
}
}
_sched = StdSchedulerFactory.GetDefaultScheduler();
_sched.Start(); //开启调度器
var msg = string.Format("{0} => {1}", DateTime.Now, "正在开启调度器...");
Console.WriteLine(msg);
IJobDetail job2 = JobBuilder.Create<DumbJob>()
.WithIdentity("myJob", "group1")
.UsingJobData("jobSays", "1")
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("mytrigger", "group1")
.StartNow()
.WithCronSchedule("0 0/10 14 * * ?") //在每天下午2点到下午2:55期间的每10分钟触发
// .WithCronSchedule("/5 * * ? * *") //时间表达式,5秒一次
.Build();
_sched.ScheduleJob(job2, trigger2);
msg = string.Format("{0} => {1}", DateTime.Now, "定时调度器启动成功...");
Console.WriteLine(msg);
}
需要实现IJob接口,接口写自己的逻辑
public class DumbJob : IJob
{
/// <summary>
/// context 可以获取当前Job的各种状态。
/// </summary>
/// <param name="context"></param>
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
string content = dataMap.GetString( "jobSays" );//获取到作业数据,就是1
//调用删除日志文件夹内容的方法
DeleteFile("D:/test", Convert.ToInt32(content)); //删除该目录下 超过 1天的文件
Console.WriteLine( "作业执行,jobSays:删除超过" + content+"天的日志文件");
}
}
如果需要停止调度器:
public void Stopsched()
{
if (_sched != null)
{
if (_sched.IsStarted)
{
_sched.Shutdown();
}
}
}
具体的时间表达式有:
上面是简单的实现,如果需要深入了解,请看官方学习文档:http://www.quartz-scheduler.net/documentation/index.html
本事例结合参考:https://archy.blog.csdn.net/article/details/79565831