StreamWriter不会写入日志文件

时间:2014-04-04 03:59:31

标签: c# streamwriter

此代码将创建" output.txt"在C:\ temp中,如果它还没有存在。但是,log.WriteLine();并不适用于我。当我打开文件时,我看不到它。这是为什么?

private static string LogFile = @"C:\Temp\output.txt";
private StreamWriter log;
if (!File.Exists(@"" + LogFile))
{
    log = new StreamWriter(@"" + LogFile);
}
else {
    log = File.AppendText(@"" + LogFile);
}
log.WriteLine("["+DateTime.Now + "]: ");

3 个答案:

答案 0 :(得分:4)

您需要关闭StreamWriter。最好使用using块,因为它可以保证StreamWriter将被关闭,即使抛出异常也是如此。

using (var log = GetLog()){
    log.WriteLine("["+DateTime.Now + "]: ");
}

...

public StreamWriter GetLog(){
    if (!File.Exists(@"" + LogFile))
    {
        return new StreamWriter(@"" + LogFile);
    }
    else {
        return File.AppendText(@"" + LogFile);
    }
}

答案 1 :(得分:1)

对@John Saunders的代码进行了一点改进。

using (var log = GetLog())
{
    log.WriteLine("["+DateTime.Now + "]: ");
}

...

public StreamWriter GetLog()
{
    return new StreamWriter(LogFile, File.Exists(LogFile));
}

第二个参数StreamWriter constructer用于确定append操作。因此,如果文件存在附加,否则不会这样做。我认为这更整洁。实际上你甚至可以这样做:

using (var log = new StreamWriter(LogFile, true))
{
    log.WriteLine("["+DateTime.Now + "]: ");
}

始终追加,如果文件不存在则创建它。

答案 2 :(得分:0)

如果您总是将相同的内容附加到文件中,无论它是否已存在,您都不需要条件。

如果文件不存在,

File.AppendText将创建该文件。

private static string LogFile = @"C:\Temp\output.txt";

using (StreamWriter sw = File.AppendText(LogFile)) 
{
    sw.WriteLine("["+DateTime.Now + "]: ");
}

正如John Saunders所说,你需要处理流编写器,这将通过将其放入using语句来完成。

Documentation for StreamWriter