用C#写一个遍历指定文件夹,(子文件夹名称由日期组成,例如:2023年3月23日,就是20230323)删除30天之前的子文件夹及其文件(天数可配置),的windwos服务,指定文件夹路径可使用配置文件配置,并可以配置多个文件夹,每天运行一次,需要加日志
以下是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
原文地址: https://www.cveoy.top/t/topic/BrD 著作权归作者所有。请勿转载和采集!