2010-03-22 64 views
3

我试图每小时创建一个新的日志文件,并在服务器上运行以下代码。当天的第一个日志文件正在创建并写入正常,但当天没有创建其他日志文件。任何想法可能会出错?也没有例外。StreamWriter没有创建新文件

private void LogMessage(Message msg) 
{ 
    string name = _logDirectory + DateTime.Today.ToString("yyyyMMddHH") + ".txt"; 

    using (StreamWriter sw = File.AppendText(name)) 
    { 
     sw.WriteLine(msg.ToString()); 
    } 
} 

回答

6

使用DateTime.Today归零时间部分。您应该使用DateTime.NowDateTime.UtcNow,以便返回的DateTime包含一个不同于零的小时。

+0

他使用DateTime.Today创建具有该名称的文件。使用DateTime.Now作为文件名是没有意义的,因为他想在当前一天重用该文件。 – MadBoy

+0

@MadBoy,来自OP问题:(“我试图每小时创建一个新的日志文件”)。然后将返回的“DateTime”格式化为只包含日期和小时组件。 –

+0

d'oh!谢谢JA。 *挂在耻辱* – fearofawhackplanet

0

由于datetime.today的使用情况,您的路径显示不正确。 尝试在功能中使用Path.Combine以防止其他错误(如“/”添加等)MSDN

1

今天只给出当前日期。所以HH总是“00”。 改为尝试DateTime.Now.ToString(“yyyyMMddHH”)。

0

你只得到一个文件的原因是由于你使用了DateTime.Today而不是DateTime.NowDateTime.TodayDateTime.Now的值相同,但时间元素设置为午夜(00:00)。

DateTime.Now.ToString("yyyyMMddHH")生产 “2010032211”

DateTime.Today.ToString("yyyyMMddHH")生产 “201032200”(没有时间部分)

DateTime.Today的情况下,你会看到,无论一天的时间相同的值。这就是为什么你只能得到第一个创建的文件,因为你的代码目前只能每天创建一个唯一的文件名,而不是每个小时。

更改DateTime.TodayDateTime.Now并解决您的问题。