如何定时清空临时文件夹中的文件
开发工具与关键技术:Visual Studio
作者:胡宁淇
撰写时间:2019年4月14日
在我们上传文件到HTML页面的时候,在没有正式保存之前,我们一般会把这些文件暂时存放到一个临时文件夹里面,而正式保存之后,临时文件夹里面的文件却并没有删除,久而久之,当临时文件夹里面的文件越来越多时就会影响整个项目的运行速度,所以我们就写了一个方法来定时清空临时文件夹里面的文件。
这个方法需要借用一个插件才能实现定时清空的功能,所以我们先把插件引用进来,引用的是这个插件。
然后我们创建一个类,在这个类里面写方法
public class FluentScheduler
{
// 启动定时任务
//public static void StartUp()
//{
//
JobManager.Initialize(new MyRegistry());
//}
// 停止定时任务
//public static void Stop()
//{
//
JobManager.Stop();
//}
}
我们用私有类创建一个待处理的作业工厂
internal class MyRegistry: Registry
{
在构造函数中设置好各个Job的执行计划,下面是执行清空各个时间段,我们是用的是在每天2点前清空数据
public MyRegistry() {
// 立即执行计划任务,并根据指定时间间隔执行一次计划任务
//(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
//Schedule<TestJob>().ToRunNow().AndEvery(10).Seconds();
// 延迟一个指定时间间隔执行一次计划任务。
//(当然,这个间隔依然可以是秒、分、时、天、月、年等。)
//Schedule().ToRunOnceIn(10).Seconds();
//在一个指定时间执行计划任务 每个小时的第10分钟执行
//Schedule().ToRunEvery(1).Hours().At(10);
// 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)
//Schedule().ToRunEvery(1).Days().At(13,
10);
//每n年的第几天
//Schedule().ToRunEvery(1).Years().On(5);
//每n年的最后一天
//Schedule<TestJob>().ToRunEvery(1).Years().OnTheLastDay();
//每n月的第几天
//Schedule().ToRunEvery(1).Months().On(1);
//每n月的第一个星期的星期5 的15:0执行 //Schedule().AndThen().ToRunEvery(1).Months().OnTheFirst(DayOfWeek.Friday).At(15,
0);
//每n月的第一个星期的星期5 的15:0执行 CleanJob和TestJob //Schedule().AndThen().ToRunEvery(1).Months().OnTheFirst(DayOfWeek.Friday).At(15,
0);
//在每天2点前清理数据
Schedule<CleanJob>().ToRunNow().AndEvery(10).Days().At(2,
00);
}
}
下面就是操作要清空的文件夹了,用于清理
Document\Temp目录的临时文件
internal class CleanJob : IJob
{
void IJob.Execute() {
获取项目运行目录+Document\Temp来获取临时目录的绝对路径
string str = AppDomain.CurrentDomain.BaseDirectory + "Document\\Temp\\";
try
{
//判读是否存在Temp目录
if (Directory.Exists(str))
{
//存在Temp目录,就删除所有的子目录和子文件
//获取指定目录中的子目录的名称(包括其路径)。
string[] directtores = Directory.GetDirectories(str);
遍历循环 Document\Temp\
里面的所有文件和子目录
foreach (string directory in directtores)
{
//删除指定的目录并(如果指示)删除该目录中的所有子目录和文件。
Directory.Delete(directory,true);
}
//返回指定目录中文件的名称(包括其路径)。
string[] files = Directory.GetFiles(str);
foreach (string file in files)
{
// 删除指定的文件。
File.Delete(file);
}
}
else
{
// 不存在,就创建Temp目录
Directory.CreateDirectory(str);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
写完方法后我们想在项目启动的时候就清空,那么我们可以把启动定时任务的代码写在整个项目的入口,也就是里面的
Application_Start方法是整个项目的入口
protected void Application_Start()
{
//初始化定时任务--定时任务就在这里加载
JobManager.Initialize(new MyRegistry());
}
下面来看一下效果,我们可以看到一开始临时文件夹中是有文件的
当我们启动项目之后就发现临时文件夹中的文件已经被清空掉了