C# FileStream.Write不';我什么也不写

C# FileStream.Write不';我什么也不写,c#,filestream,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_HH

我编写了以下代码:

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

您需要使用flush保存

logFileStream.Flush();
编辑:


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

您需要使用flush来保存

logFileStream.Flush();
编辑:


Close也应该刷新,但如果稍后发生,则可能会对缓冲区进行垃圾回收

FileStream
实现
IDisposable

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

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

using (FileStream fs = new FileStream(logFilePath, FileMode.Create))
{
   // Do stuff with fs
}
如果必须保持当前结构,请检查是否确实调用了
Close()
(例如,您没有收到阻止调用该结构的异常)

更新

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

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


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

FileStream
实现了
IDisposable

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

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

using (FileStream fs = new FileStream(logFilePath, FileMode.Create))
{
   // Do stuff with fs
}
如果必须保持当前结构,请检查是否确实调用了
Close()
(例如,您没有收到阻止调用该结构的异常)

更新

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

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


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

不关闭()也会刷新流?他没有在WriteLine中调用它,也不确定他是否做过。谢谢!它得到了保存,但另一个问题是:没有断线。所有内容都在文本文档的同一行中。但我使用了“\n”:
byte[]textArray=Encoding.ASCII.GetBytes(“[”+DateTime.Now.ToString(“dd.MM.yyyy-HH:MM:ss”)+“]+text+“\n”);logFileStream.Write(textArray,0,textArray.Length);logFileStream.Flush()
@namespace如果您在记事本中查看它,它无法识别
\n
换行符,您需要使用
\r\n
环境。NewLine
@namespace use Environment.NewLine而不是\n desn not Close()也会刷新流?他没有在WriteLine中调用它,不确定他是否做过。谢谢!它得到了保存,但另一个问题是:没有断线。所有内容都在文本文档的同一行中。但我使用了“\n”:
byte[]textArray=Encoding.ASCII.GetBytes(“[”+DateTime.Now.ToString(“dd.MM.yyyy-HH:MM:ss”)+“]+text+“\n”);logFileStream.Write(textArray,0,textArray.Length);logFileStream.Flush()
@namespace如果您在记事本中查看它,它无法识别换行符的
\n
,您需要使用
\r\n
环境。换行符
@namespace使用Environment.NewLine,而不是\n调用Close();方法?如果你的问题已经解决了,那么请标记解决问题的答案。你是否调用了Close();方法?如果您的问题已经解决,那么请标记解决问题的答案。非常感谢,但是
FileStream
没有
WriteLine
成员。糟糕。我在想一些包装纸。已编辑。非常感谢,但是
FileStream
没有
WriteLine
成员。哎呀,我的错。我在想一些包装纸。编辑。