用C#写一个遍历指定文件夹,(子文件夹名称由日期组成,例如:2023年3月23日,就是20230323)删除30天之前的子文件夹及其文件(天数可配置),的windwos服务,指定文件夹路径可使用配置文件配置,并可以配置多个文件夹,
以下是使用C#编写的遍历指定文件夹的Windows服务,可以配置多个文件夹,删除指定天数之前的子文件夹及其文件:
using System; using System.IO; using System.ServiceProcess; using System.Configuration;
namespace DeleteOldFoldersService { public partial class DeleteOldFolders : ServiceBase { private int daysToDelete;
public DeleteOldFolders()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// 读取配置文件中指定的文件夹路径和天数
string[] folderPaths = ConfigurationManager.AppSettings["FolderPaths"].Split(',');
daysToDelete = int.Parse(ConfigurationManager.AppSettings["DaysToDelete"]);
// 遍历每个文件夹并删除30天之前的子文件夹及其文件
foreach (string folderPath in folderPaths)
{
DeleteOldFoldersInFolder(folderPath);
}
}
protected override void OnStop()
{
// 停止服务时不做任何操作
}
private void DeleteOldFoldersInFolder(string folderPath)
{
DirectoryInfo folder = new DirectoryInfo(folderPath);
if (!folder.Exists)
{
return;
}
foreach (DirectoryInfo subfolder in folder.GetDirectories())
{
// 子文件夹名称应为8位日期格式,否则跳过
DateTime date;
if (!DateTime.TryParseExact(subfolder.Name, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date))
{
continue;
}
// 判断子文件夹是否是30天之前的,是则删除
if (DateTime.Now.Subtract(date).Days > daysToDelete)
{
try
{
subfolder.Delete(true);
}
catch (Exception ex)
{
// 记录错误日志
EventLog.WriteEntry("DeleteOldFoldersService", "Failed to delete folder " + subfolder.FullName + ": " + ex.Message, EventLogEntryType.Error);
}
}
}
}
}
}
需要在项目中添加对System.Configuration和System.ServiceProcess的引用。可以在项目属性的“设置”中添加两个配置项:FolderPaths和DaysToDelete,分别表示要遍历的文件夹路径和要删除的天数。例如:
FolderPaths: C:\TestFolder1,C:\TestFolder2 DaysToDelete: 30
这样,服务就可以遍历指定的文件夹,删除30天之前的子文件夹及其文件。如果有错误发生,将在Windows事件日志中记录。可以使用命令行工具sc.exe将服务安装到Windows服务中,例如:
sc.exe create DeleteOldFoldersService binPath= "C:\DeleteOldFoldersService.exe" start= auto
然后在Windows服务中启动服务即可。
原文地址: https://www.cveoy.top/t/topic/BqI 著作权归作者所有。请勿转载和采集!