FileStream.Write不写任何东西

时间:2013-02-04 22:43:54

标签: c# filestream

我写了以下代码:

public static class PLog
{
    private static FileStream logFileStream;
    private static string logFilePath;

    public static void Initialize()
    {
        logFilePath = PSettings.IO.dirLogs + "log_" + DateTime.Now.ToString("ddMMyy_HHmmss") + ".txt";

        if (!Directory.Exists(PSettings.IO.dirLogs)) Directory.CreateDirectory(PSettings.IO.dirLogs);

        logFileStream = new FileStream(logFilePath, FileMode.Create);
    }

    public static void WriteLine(string text)
    {
        byte[] textArray = Encoding.ASCII.GetBytes("[" + DateTime.Now.ToString("dd.MM.yyyy - HH:mm:ss") + "] " + text + "\n");

        logFileStream.Write(textArray, 0, textArray.Length);
    }

    public static void Close()
    {
        logFileStream.Close();
    }
}

但是当我这样称呼它时,它不会向文件写任何内容:

PLog.Initialize();
PLog.WriteLine("test");
PLog.Close();

文件已创建,但大小为0字节。

2 个答案:

答案 0 :(得分:3)

FileStream实施IDisposable

在您的代码中显示的 static 上下文中使用它很少是一个好主意,因为很难确保调用IDisposable.Dispose()以正确清理流

如果可以,请将FileStream使用关键字一起使用,以确保调用Dispose()

using (FileStream fs = new FileStream(logFilePath, FileMode.Create))
{
   // Do stuff with fs
}

如果您必须保留当前的结构,请检查是否已调用Close() (并且您不会例如获取阻止其被调用的异常)。

<强>更新

关于你对其他答案的评论:

在将其写出之前,将Environment.Newline附加到字符串的末尾。

或者,您可以使用公开WriteLine()方法的StreamWriter

答案 1 :(得分:1)

您需要使用flush来保存

logFileStream.Flush();

编辑:

关闭也应该刷新,但如果以后发生,则缓冲区可能会被垃圾收集

相关问题