C#实现服务定时删除文件并记录

承接上篇,导出功能如果文件长时间不处理,就会冗余拖慢系统,所以写了个服务定时去删除服务器文件,直接上代码

目录

1.创建C# Windows服务 

         1.1创建一个服务

         1.2配置服务参数

         1.3编写逻辑代码

2.部署写好的windows服务

2.1使用cmd

2.2使用安装命令

3.调试Windows服务

3.1服务部署好后,开启服务

3.2 利用vs断点调试


1.创建C# Windows服务 

1.1创建一个服务

用vs创建一个新的服务,并进行命名,如下列图       创建完成后,目录格式是这样的

咱第一小步就完事了

1.2配置服务参数

右键-添加安装程序然后会有两个文件,分别设置这两个文件的属性,看图

这样基本配置就完成了,下面就是进行逻辑代码编写

1.3编写逻辑代码

双击services,跳转到代码界面

首先NEW一个定时器timer作为定时依据

System.Timers.Timer Timer;

在启动方法里 初始化timer参数

 protected override void OnStart(string[] args)
        {
            Timer = new System.Timers.Timer();
            Timer.Interval = 1000 * 60 ; // 1分钟
            Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
            Timer.Enabled = true;
        }



Interval单位为毫秒,需要自己计算,例如每24小时执行一次就是 1000*60*60*24
Enabled 为是否引发Elapsed 里面的事件,这个事件就是自定义的Timer_Elapsed

在停止方法里,停掉timer的触发

protected override void OnStop()
        {
            Timer.Enabled = false;
        }

然后就是自己建立一个触发的事件

 private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //这里面执行你要进行的操作,例如增删改查等等。。
            DeleteExcel();//这个方法是我自己定义的
        }


//下面是逻辑删除代码,理论上,你可以直接复制就能运行,需要修改你的路径

 public void DeleteExcel() 
        {
            DirectoryInfo dir = new DirectoryInfo("你的路径,需实体路径");
            FileInfo[] files = dir.GetFiles();
            
            if (files.Length > 0)
            {
                WriteLog("准备执行删除文件!!");
                foreach (FileInfo item in files)
                {
                    if (item.CreationTime < DateTime.Now)
                    {
                        item.Delete();
                        WriteLog("删除文件:" + item.Name);
                    }
                }
                WriteLog("本次删除文件已执行完毕!!");
            }
            
            
        }


        public void WriteLog(string msg)
        {
            //这个路径,是会自动寻找到你当前服务所在路径
            string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log";
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
            try
            {
                using (StreamWriter sw = File.AppendText(logPath))
                {
                    sw.WriteLine("消息:" + msg);
                    sw.WriteLine("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                    sw.WriteLine("**************************************************");
                    sw.WriteLine();
                    sw.Flush();
                    sw.Close();
                    sw.Dispose();
                }
            }
            catch (IOException e)
            {
                using (StreamWriter sw = File.AppendText(logPath))
                {
                    sw.WriteLine("异常:" + e.Message);
                    sw.WriteLine("时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
                    sw.WriteLine("**************************************************");
                    sw.WriteLine();
                    sw.Flush();
                    sw.Close();
                    sw.Dispose();
                }
            }
        }

整合起来,一个简单定时删除的代码就完成了,如图

准备工作ok了,然后就要进行部署服务了

2.部署写好的windows服务

2.1使用cmd

4.0:cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319

2.0:cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

2.2使用安装命令

安装:

InstallUtil E:\LearningWork\.NET\DeleteTest\Demo.exe

卸载:

InstallUtil  /u E:\LearningWork\.NET\DeleteTest\Demo.exe

 

3.调试Windows服务

调试你的服务前提,是你的服务必须得正确部署在本地服务上,并且成功运行才可以

3.1服务部署好后,开启服务

3.2 利用vs断点调试

进入vs,选择调试-附加到进程

找到你部署的服务项目名称

点击附加,等待就进入了调试程序,在你的方法体或者方法入口打上断点,等待服务到你的触发时间,则会自动进入断点调试,剩下的就和平常一样。

注意,每次修改服务代码后,必须重新生成-卸载已有服务-重新安装服务 这个流程来,不然会进不到断点,而且服务也不会更新


到这里一个比较简单的服务从创建到部署到调试就完成了,当然后面还有有更复杂的逻辑,还会涉及到线程之类,还是需要多钻研多学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值