| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | using Ips.Library.Basic;using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Ips.Library.WebApi{    /// <summary>    /// 基础清理服务(负责upload目录的清理)    /// </summary>    public class BaseClearService : BackgroundService    {        private readonly string dir = "upload";        /// <summary>        ///         /// </summary>        /// <param name="stoppingToken"></param>        /// <returns></returns>        protected override async Task ExecuteAsync(CancellationToken stoppingToken)        {            await Task.Delay(5000, stoppingToken);//延迟一会儿让webbapi先启动            IpsLogger.Info($"启动通用目录{dir}数据清理功能...");            await Task.Run(async () =>            {                while (!stoppingToken.IsCancellationRequested)                {                    Clear();                    //5分钟扫描一次                    await Task.Delay(600 * 1000, stoppingToken);                }                //程序退出时强制删除所有                try                {                    Directory.Delete(dir, true);                }                catch                { }            }, stoppingToken);        }        private void Clear()        {            #region 清理空目录            string clearDir = Path.Combine(AppContext.BaseDirectory, dir);            try            {                var dirs = Directory.EnumerateDirectories(clearDir, "*", SearchOption.AllDirectories);                foreach (var item in dirs)                {                    DirectoryInfo dir = new DirectoryInfo(item);                    if (dir.EnumerateFiles().Any()) continue;                    //删除5分钟以前创建的空目录                    if ((DateTime.Now - dir.CreationTime).TotalMinutes > 5)                    {                        dir.Delete();                    }                }            }            catch (Exception ex)            {                IpsLogger.Error($"删除{dir}目录中的空目录出错", ex);            }            #endregion            #region 清理30分钟以前上传的文件            var files = Directory.EnumerateFiles(clearDir, "*", SearchOption.AllDirectories);            foreach (var item in files)            {                FileInfo f = new FileInfo(item);                if ((DateTime.Now - f.LastWriteTime).TotalMinutes > 30)                {                    try                    {                        f.Delete();                    }                    catch (Exception ex)                    {                        IpsLogger.Error($"$删除{dir}目录中文件[{f.Name}]失败", ex);                    }                }            }            #endregion        }    }}
 |