以下是C#代码实现:

using System;
using System.IO;
using System.ServiceProcess;
using System.Configuration;
using System.Collections.Specialized;

namespace DeleteOldFoldersService
{
    public partial class DeleteOldFoldersService : ServiceBase
    {
        private int daysToDelete;
        private string[] folderPaths;
        private string logFilePath;

        public DeleteOldFoldersService()
        {
            InitializeComponent();

            // 读取配置文件中的参数
            NameValueCollection appSettings = ConfigurationManager.AppSettings;
            daysToDelete = Convert.ToInt32(appSettings["DaysToDelete"]);
            folderPaths = appSettings["FolderPaths"].Split(new char[] { ',' });
            logFilePath = appSettings["LogFilePath"];
        }

        protected override void OnStart(string[] args)
        {
            // 开始执行任务
            try
            {
                foreach (string folderPath in folderPaths)
                {
                    DeleteOldFolders(folderPath);
                }
                WriteLog("任务执行成功");
            }
            catch (Exception ex)
            {
                WriteLog("任务执行失败:" + ex.Message);
            }
        }

        protected override void OnStop()
        {
            // 停止服务
        }

        private void DeleteOldFolders(string folderPath)
        {
            string[] subfolders = Directory.GetDirectories(folderPath);
            foreach (string subfolder in subfolders)
            {
                string subfolderName = new DirectoryInfo(subfolder).Name;
                DateTime subfolderDate;
                if (DateTime.TryParseExact(subfolderName, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out subfolderDate))
                {
                    if (DateTime.Now.Subtract(subfolderDate).Days >= daysToDelete)
                    {
                        Directory.Delete(subfolder, true);
                        WriteLog("已删除子文件夹:" + subfolder);
                    }
                }
            }
        }

        private void WriteLog(string message)
        {
            using (StreamWriter sw = new StreamWriter(logFilePath, true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + message);
            }
        }
    }
}

需要在程序集信息中添加安装程序:

using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;

namespace DeleteOldFoldersService
{
    [RunInstaller(true)]
    public class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller processInstaller;
        private ServiceInstaller serviceInstaller;

        public ProjectInstaller()
        {
            processInstaller = new ServiceProcessInstaller();
            processInstaller.Account = ServiceAccount.LocalSystem;
            serviceInstaller = new ServiceInstaller();
            serviceInstaller.ServiceName = "DeleteOldFoldersService";
            serviceInstaller.DisplayName = "Delete Old Folders Service";
            serviceInstaller.Description = "遍历指定文件夹,删除30天之前的子文件夹及其文件";
            serviceInstaller.StartType = ServiceStartMode.Automatic;
            Installers.Add(processInstaller);
            Installers.Add(serviceInstaller);
        }
    }
}

在app.config中添加配置项:

<configuration>
  <appSettings>
    <add key="DaysToDelete" value="30" />
    <add key="FolderPaths" value="C:\TestFolder1,C:\TestFolder2" />
    <add key="LogFilePath" value="C:\DeleteOldFoldersService.log" />
  </appSettings>
</configuration>

其中,DaysToDelete是要删除的天数,FolderPaths是要遍历的文件夹路径,多个路径使用逗号分隔,LogFilePath是日志文件路径。

安装服务:

sc create DeleteOldFoldersService binPath=C:\DeleteOldFoldersService.exe

启动服务:

sc start DeleteOldFoldersService
用C#写一个遍历指定文件夹,(子文件夹名称由日期组成,例如:2023年3月23日,就是20230323)删除30天之前的子文件夹及其文件(天数可配置),的windwos服务,指定文件夹路径可使用配置文件配置,并可以配置多个文件夹,每天运行一次,需要加日志

原文地址: https://www.cveoy.top/t/topic/BrD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录