/// <summary> /// Parses the connection string and resolves the filename by using rolling period. /// </summary> /// <param name="connectionString">Connection string to bre parsed</param> /// <param name="period">Period</param> /// <param name="date">Date</param> /// <returns></returns> public static string GetFilename(string connectionString, RollingPeriod period, DateTime date) { if (period == RollingPeriod.Never) { return(connectionString); } var c = ConnectionStringParser.Parse(connectionString); var fullpath = c["filename"]; var filename = Path.GetFileName(fullpath); var extension = Path.GetExtension(filename); var file = Path.GetFileNameWithoutExtension(filename); var folderPart = Path.GetDirectoryName(fullpath) ?? ("." + Path.DirectorySeparatorChar); var dateFormat = "yyyy-MM-dd-HHmm"; switch (period) { case RollingPeriod.HalfHour: case RollingPeriod.Quarterly: var itv = period == RollingPeriod.Quarterly ? 15 : 30; var dateMinutes = date.Minute / itv * itv; date = date.AddMinutes(-date.Minute).AddMinutes(dateMinutes); break; case RollingPeriod.Weekly: case RollingPeriod.Daily: dateFormat = "yyyy-MM-dd"; break; case RollingPeriod.Monthly: dateFormat = "yyyy-MM"; break; case RollingPeriod.Hourly: dateFormat = "yyyy-MM-dd-HH"; break; default: throw new InvalidOperationException($"period cannot be parsed: {period}"); } file = file + "_" + date.ToString(dateFormat); c["filename"] = Path.Combine(folderPart, $"{file}{extension}"); return(ConnectionStringParser.Create(c)); }