除非file.Close(),否则文本文件写入不反映更改

时间:2014-10-09 06:31:19

标签: c# logging file-io

我正在使用文件IO操作将我的应用程序日志写入文本文件。一旦用户启动应用程序,我就会记录详细信息(例如谁发布,日期时间,机器名称等)。我有点担心,因为写入文件的文本没有反映,除非它遇到file.Close()。如果我使用file.Close()方法,我无法再将日志写入文件,因为它说“无法写入已关闭的TextWriter”

有没有办法处理这种情况。我知道logutil符合我的要求,但不幸的是我无法使用它。

2 个答案:

答案 0 :(得分:6)

您需要定期调用Flush以确保将内存缓冲区的内容刷新到文件系统。

有关详细信息,请参阅TextWriter.Flush Method

请注意,这里的刷新很可能只是将TextWriter或文件所具有的任何缓冲区的内容转储到操作系统所具有的单独类型的缓冲区中,因此如果断电,您仍然无法保证内容已保存。但是,其他程序将能够看到该文件的内容,因为操作系统会给它们内容,即使它实际上可能还没有在磁盘上。

答案 1 :(得分:2)

您可以使用file.Flush()。它可以在您需要清除缓冲区时调用,并且流将保持打开状态:

http://msdn.microsoft.com/de-de/library/system.io.streamwriter.flush(v=vs.110).aspx

修改

要不锁定文件,您应该在写完一行后关闭文件或使用以下内容:

File.AppendAllText("log.txt", "log entry" + Environment.NewLine);