示例#1
0
        /// <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));
        }