如何修改C#代码,基于文件名嵌入的时间戳删除文件
修改后的代码
public static void DeleteLogFiles(string sPath, DateTime dtDate, int iLogFileRetention) { try { var cutoffDate = dtDate.Subtract(TimeSpan.FromDays(iLogFileRetention)); var logFiles = new DirectoryInfo(sPath).GetFiles(); (from f in logFiles let fileNameWithoutExt = Path.GetFileNameWithoutExtension(f.Name) let timestampPart = fileNameWithoutExt.Split('_').LastOrDefault() // 提取下划线后的时间戳部分 where !string.IsNullOrEmpty(timestampPart) && timestampPart.Length == 14 // 确保是14位时间戳格式 let isParsed = DateTime.TryParseExact(timestampPart, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out var fileTimestamp) where isParsed && fileTimestamp < cutoffDate select f ).ToList().ForEach(f => f.Delete()); } catch (Exception ex) { // 建议在此添加异常日志记录,便于排查删除失败问题 } }
核心逻辑说明
- 提取时间戳:先移除文件扩展名,再通过下划线分割文件名,取出后面的14位时间戳字符串。
- 时间解析适配:用
TryParseExact严格按格式解析时间戳,代码中默认适配你提供的示例格式yyyyMMddHHmmss(对应20240309000024)。如果你的时间戳实际是MMddyyyyHHmmss格式(月-日-年-时分秒),直接把格式字符串改成"MMddyyyyHHmmss"即可。 - 异常防护:添加了空值、长度检查和解析成功判断,避免不符合格式的文件导致程序报错。
内容的提问来源于stack exchange,提问作者NoBullMan
相关产品推荐
相关产品推荐

