admin 管理员组

文章数量: 1184232

如何定时清空临时文件夹中的文件


开发工具与关键技术: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());
    }

下面来看一下效果,我们可以看到一开始临时文件夹中是有文件的

当我们启动项目之后就发现临时文件夹中的文件已经被清空掉了

本文标签: 目录 系统 任务