/// <summary> /// 删除过早的临时文件 /// </summary> /// <param name="path">包含临时文件的目录,删除时会查找所有子目录</param> /// <param name="timeAgo">指定一个时间间隔,超过这个时间间隔前的文件将被删除</param> /// <param name="topDirectoryOnly">是否只清除指定目录,不包含它的子目录</param> /// <returns>过程中所有遇到的异常</returns> public static List <Exception> DeleteOldFiles(string path, TimeSpan timeAgo, bool topDirectoryOnly = true) { List <Exception> list = new List <Exception>(); try { if (Directory.Exists(path) == false) { return(list); } SearchOption searchOption = topDirectoryOnly ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories; IEnumerable <string> files = Directory.EnumerateFiles(path, "*.*", searchOption); DateTime now = DateTime.Now; foreach (string file in files) { // 清除过程中,也有可能其它进程正在删除文件,所有文件不存在就忽略 if (RetryFile.Exists(file) == false) { continue; } // 以文件的最后修改时间做为对比标准 DateTime time = RetryFile.GetLastWriteTime(file); TimeSpan span = now - time; // 删除 指定时间 前的文件 if (span >= timeAgo) { try { //Console.WriteLine(file); RetryFile.Delete(file); } catch (Exception ex) { list.Add(ex); } } } } catch (Exception ex2) { list.Add(ex2); } return(list); }
/// <summary> /// 删除临时文件 /// </summary> /// <param name="path">要执行删除的根目录</param> /// <param name="timeAgo">一个时间间隔,表示需要删除多久前的文件</param> /// <param name="topDirectoryOnly">是否只扫描指定的根目录(不包含子目录),如果需要扫描子目录,请指定为 false</param> public void DeleteFiles(string path, TimeSpan timeAgo, bool topDirectoryOnly) { this.Count = 0; this.Exceptions.Clear(); if (string.IsNullOrEmpty(path) || Directory.Exists(path) == false) { return; } DateTime now = DateTime.Now; SearchOption searchOption = topDirectoryOnly ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories; try { IEnumerable <string> files = Directory.EnumerateFiles(path, "*.*", searchOption); foreach (string file in files) { // 清除过程中,也有可能其它进程正在删除文件,所有文件不存在就忽略 if (RetryFile.Exists(file) == false) { continue; } // 以文件的最后修改时间做为对比标准 DateTime time = RetryFile.GetLastWriteTime(file); TimeSpan span = now - time; // 删除 指定时间 前的文件 if (span >= timeAgo) { try { RetryFile.Delete(file); this.Count++; } catch (Exception ex) { this.Exceptions.Add(ex); } } } } catch (Exception ex2) { this.Exceptions.Add(ex2); } }