Группировка записи в файл-текстовик с временным разделением в 3 часа

Всем привет, я пишу участок кода, который будет собирать инфу по логам раскидывая по папкам ../дата/файл(11:00:00- 14:00:00).txt; у меня получился такой участок кода:

DirectoryInfo dir = new DirectoryInfo(@"logger");
        if (!dir.Exists)
        {
            dir.Create();
        }

        var data = Console.ReadLine();

        DirectoryInfo directory = new DirectoryInfo(@$"logger/{DateTime.UtcNow.ToShortDateString()}");
        if (!directory.Exists)
        {
            directory.Create();
        }


        File.AppendAllText(@$"logger/{DateTime.UtcNow
            .ToShortDateString()}/{DateTime.UtcNow
            .ToShortTimeString().Replace(':', '.')} - {DateTime
            .UtcNow.AddHours(3)
            .ToShortTimeString()
            .Replace(':', '.')}.txt", data + " \n", Encoding.UTF8);
    }

И у меня есть вопрос, как в течение 3 часов записывать в один и тот же файл? тоесть что бы не создавался ../дата/12:01:00 - 15:01:00.txt , 12:02:00 - 15:02:00.txt . Короче чтобы данные записывались не раздельно, а в один и тот же файл на промежутке 12:01:00 - 15:01:00.txt


Ответы (1 шт):

Автор решения: tym32167

Я бы первым делом так не делал, а искал бы готовые логгеры.

Но если вы настроены серьезно такое писать руками, но в таких случаях надо нормализовать время. Например

string GetLogFilename(DateTime dt)
{
    var newDateTime = new DateTime(dt.Year, dt.Month, dt.Day, (dt.Hour / 3) * 3, 0, 0, 0, dt.Kind);
    return newDateTime.ToString("yyyy_MM_dd_HH") + ".log";
}

Проверить это можно так

for (int i = 0; i < 30; i++)
{
    Console.WriteLine($"{DateTime.Now.AddHours(i).ToString("yyyy_MM_dd_HH")} - {GetLogFilename(DateTime.Now.AddHours(i))}");
}

Вывод

2021_02_24_13 - 2021_02_24_12.log
2021_02_24_14 - 2021_02_24_12.log
2021_02_24_15 - 2021_02_24_15.log
2021_02_24_16 - 2021_02_24_15.log
2021_02_24_17 - 2021_02_24_15.log
2021_02_24_18 - 2021_02_24_18.log
2021_02_24_19 - 2021_02_24_18.log
2021_02_24_20 - 2021_02_24_18.log
2021_02_24_21 - 2021_02_24_21.log
2021_02_24_22 - 2021_02_24_21.log
2021_02_24_23 - 2021_02_24_21.log
2021_02_25_00 - 2021_02_25_00.log
2021_02_25_01 - 2021_02_25_00.log
2021_02_25_02 - 2021_02_25_00.log
2021_02_25_03 - 2021_02_25_03.log
2021_02_25_04 - 2021_02_25_03.log
2021_02_25_05 - 2021_02_25_03.log
2021_02_25_06 - 2021_02_25_06.log
2021_02_25_07 - 2021_02_25_06.log
2021_02_25_08 - 2021_02_25_06.log
2021_02_25_09 - 2021_02_25_09.log
2021_02_25_10 - 2021_02_25_09.log
2021_02_25_11 - 2021_02_25_09.log
2021_02_25_12 - 2021_02_25_12.log
2021_02_25_13 - 2021_02_25_12.log
2021_02_25_14 - 2021_02_25_12.log
2021_02_25_15 - 2021_02_25_15.log
2021_02_25_16 - 2021_02_25_15.log
2021_02_25_17 - 2021_02_25_15.log
2021_02_25_18 - 2021_02_25_18.log
→ Ссылка