-
Niko Ehrenfeuchter authoredNiko Ehrenfeuchter authored
FsUtils.cs 1.58 KiB
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using NLog;
namespace ATXCommon
{
public static class FsUtils
{
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
/// <summary>
/// Recursively sum up size of all files under a given path.
/// </summary>
/// <param name="path">Full path of the directory.</param>
/// <returns>The total size in bytes.</returns>
public static long GetDirectorySize(string path) {
return new DirectoryInfo(path)
.GetFiles("*", SearchOption.AllDirectories)
.Sum(file => file.Length);
}
/// <summary>
/// Convert the timestamp given by the NAME of a directory into the age in days.
/// </summary>
/// <param name="dir">The DirectoryInfo object to check for its name-age.</param>
/// <param name="baseTime">The DateTime object to compare to.</param>
/// <returns>The age in days, or -1 in case of an error.</returns>
public static int DirNameToAge(DirectoryInfo dir, DateTime baseTime) {
DateTime dirTimestamp;
try {
dirTimestamp = DateTime.ParseExact(dir.Name, "yyyy-MM-dd__HH-mm-ss",
CultureInfo.InvariantCulture);
}
catch (Exception ex) {
Log.Warn("Unable to parse time from name [{0}], skipping: {1}",
dir.Name, ex.Message);
return -1;
}
return (baseTime - dirTimestamp).Days;
}
}
}