StreamWriter не создает новый файл

Я пытаюсь создать новый файл журнала каждый час со следующим кодом, запущенным на сервере. Создается и записывается первый файл журнала дня, но никаких файлов журналов в этот день не создается. Любые идеи, что может пойти не так? Исключения также не выбрасываются.

private void LogMessage(Message msg)
{
 string name = _logDirectory + DateTime.Today.ToString("yyyyMMddHH") + ".txt";
 using (StreamWriter sw = File.AppendText(name))
 {
 sw.WriteLine(msg.ToString());
 }
}
4 ответа

Использование DateTime.Today обнуляет временную часть. Вы должны использовать DateTime.Now или DateTime.UtcNow, чтобы возвращаемый DateTime содержал час, отличный от нуля.


Сегодня дается только текущая дата. Поэтому HH всегда "00". Вместо этого попробуйте использовать DateTime.Now.ToString( "yyyyMMddHH" ).


Причина, по которой вы получаете только один файл, связана с использованием DateTime.Today вместо DateTime.Now. DateTime.Today - это то же значение, что и DateTime.Now, но с элементом времени, установленным в полночь (00:00).

DateTime.Now.ToString("yyyyMMddHH") выводит "2010032211"

DateTime.Today.ToString("yyyyMMddHH") создает "201032200" (без временной части)

В случае DateTime.Today вы увидите одно и то же значение, независимо от времени суток. Вот почему вы получаете только первый файл, созданный, так как ваш код будет создавать только уникальное имя файла каждый день, а не каждый час.

Измените DateTime.Today на DateTime.Now и ваша проблема будет решена.


Похоже, ваш путь был неправильным из-за использования datetime.today. Попробуйте использовать Path.Combine в этой функции, чтобы предотвратить другие ошибки, такие как добавление "/" и т.д. MSDN

licensed under cc by-sa 3.0 with attribution.