FileStream.Write没有';我什么都不写

本文关键字:什么 Write 没有 FileStream | 更新日期: 2023-09-27 17:57:29

我已经编写了以下代码:

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字节。

FileStream.Write没有';我什么都不写

FileStream实现IDisposable

静态上下文中使用它很少是一个好主意,就像您在代码中显示的那样,因为很难真正确保调用IDisposable.Dispose()来正确清理流。

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

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

如果必须保留当前结构,请检查是否确实调用了Close()(例如,您没有得到阻止调用它的异常)。

更新

关于你对另一个答案的评论:

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

或者,您可以使用StreamWriter,它公开一个WriteLine()方法。

您需要使用flush来保存

logFileStream.Flush();

编辑:

Close也应该刷新,但如果稍后发生这种情况,缓冲区可能会被垃圾收集