MultiDirectoryCleanupService.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using BZFAStandardLib;
  2. using Sunny.UI.Win32;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Timers;
  10. namespace MainForm.ClassFile.XiaomiClass
  11. {
  12. internal class MultiDirectoryCleanupService
  13. {
  14. private Timer _timer;
  15. private List<string> _directoriesToClean;
  16. public MultiDirectoryCleanupService()
  17. {
  18. // 初始化需要清理的目录列表
  19. _directoriesToClean = new List<string>
  20. {
  21. GlobalContext.MqttDeviceStateDir,//mqtt日志 - 设备状态日志
  22. GlobalContext.MqttInputBeginDir,//mqtt日志 - 节拍日志
  23. GlobalContext.MqttOperateLogDir,//mqtt日志 - 用户操作日志
  24. GlobalContext.MqttAlarmLogDir,//mqtt日志 - 故障日志日志
  25. GlobalContext.MqttPassResultLogDir,//mqtt日志 - 过站结果日志
  26. GlobalContext.MqttPassDetailLogDir,//mqtt日志 - 过站明细日志
  27. GlobalContext.MqttFileUpLogDir,//mqtt日志 - 文件上传日志
  28. GlobalContext.MqttFileBackupLogDir,//mqtt日志 - 文件备份
  29. GlobalContext.MqttDeviceConfigLogDir, // mqtt日志 - 装备配置日志
  30. GlobalContext.WorkLogDir // mqtt日志 - // 运行日志
  31. };
  32. // 设置定时器, 比如每天运行一次 (以毫秒为单位)
  33. //_timer = new Timer(24 * 60 * 60 * 1000);
  34. _timer = new Timer(1 * 60 * 60 * 1000);
  35. _timer.Elapsed += OnTimerElapsed;
  36. }
  37. private void OnTimerElapsed(object sender, ElapsedEventArgs e)
  38. {
  39. foreach (var directory in _directoriesToClean)
  40. {
  41. try
  42. {
  43. var files = Directory.GetFiles(directory);
  44. foreach (var file in files)
  45. {
  46. DateTime lastWriteTime = File.GetLastWriteTime(file);
  47. if ((DateTime.Now - lastWriteTime).TotalDays > GlobalContext.ClearLogDays)
  48. {
  49. File.Delete(file);
  50. string logPath = GlobalContext.MqttClearFileDir + "ClearFile" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
  51. FileOperate.NewTxtFile(logPath, DateTime.Now + $"===>{file} 已被删除");
  52. }
  53. }
  54. }
  55. catch (Exception ex)
  56. {
  57. // 记录错误信息或采取其他措施
  58. Console.WriteLine($"无法清理目录 {directory}: {ex.Message}");
  59. }
  60. }
  61. }
  62. public void Start()
  63. {
  64. _timer.Start();
  65. }
  66. }
  67. }