为什么我只能在循环结束时看到我的StreamWriter行

时间:2015-03-01 13:16:20

标签: c# streamwriter

我有简单的console applicationlist个文件。 我的list上的每个循环都想将当前文件名写入简单的txt file

String path = @"C:\log.txt"; // location whre to save my txt file
List<string> files = new List<string>(); // my files list
using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(fs))
{
     foreach (string file in files)
     {
         sw.WriteLine(file);
     }
 }
  1. 为什么我能看到仅在循环结束时写的行?
  2. 如果我的应用程序在循环中间崩溃会怎么样?我的日志文件是空的吗?

2 个答案:

答案 0 :(得分:1)

出于性能原因,

StreamWriter缓冲其输出。如果内部缓冲区中有足够的字节,如果您调用Flush()或者流已关闭/处理,它将写入文件。

如果您希望输出立即显示 ,则必须在每行写入sw之后添加对sw.Flush()的调用。

答案 1 :(得分:0)

  

为什么我可以看到仅在循环结束时写入的行。

由于文件仅在StreamWriter.Dispose运行时被刷新到磁盘,因此在using语句的末尾。同时,它被缓存在内存中。

  

如果我的应用程序在中间崩溃会发生什么   循环?我的日志文件是空的吗?

这取决于程序何时终止以及该特定时刻流所处的状态。如果它能够完成并刷新到磁盘,您将看到日志文件。

如果您担心这段代码可能会导致您的应用程序因某些预期错误而崩溃,请将您的代码包装在try-catch块中,并处理这些异常。