我写了以下代码:
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字节。
答案 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();
编辑:
关闭也应该刷新,但如果以后发生,则缓冲区可能会被垃圾收集