按文件最后被访问时间计算,支持指定有效期天数,是否递归子文件夹,是否删除空路径。
/// <summary>
/// 删除过期文件
/// </summary>
/// <param name="path">当前路径</param>
/// <param name="days">有效期天数</param>
/// <param name="recursive">递归删除子文件夹和文件</param>
/// <param name="deleteIfEmpty">若执行完后当前路径为空文件夹,则删除(该属性仅针对当前路径,递归的子路径为空时一律被删除)</param>
static void DeleteExpiredFiles(string path, double days = 7, bool recursive = true, bool deleteIfEmpty = false)
{
if (!Directory.Exists(path))
return;
string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
//从文件最后被访问的时间点到当前时间点,若已超过指定期限,则删除
if (File.GetLastAccessTime(file) < DateTime.Now.AddDays(-days))
File.Delete(file);
}
if (recursive)
{
string[] dirs = Directory.GetDirectories(path);
foreach (string dir in dirs)
DeleteExpiredFiles(dir, days, recursive, true);
}
if (deleteIfEmpty
&& Directory.GetFiles(path).Length == 0
&& Directory.GetDirectories(path).Length == 0)
Directory.Delete(path);
}