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
实现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也应该刷新,但如果稍后发生这种情况,缓冲区可能会被垃圾收集