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
成员。哎呀,我的错。我在想一些包装纸。编辑。