TextWriter对象未写入完整文档

时间:2016-02-04 10:41:45

标签: c# .net buffer

您好我有一个巨大的文档,我必须使用.NET中的C#逐行阅读。 然后执行操作,然后再次写入该行。

我正在使用较小的文件测试代码,实际文件包含992.482行。 我尝试了以下代码来测试:

while (!scenFile.EndOfStream)
{   writer.WriteLine(scenFile.ReadLine().ToString();
}

我只能写992.474。然后我尝试使用writer.Flush();

System.IO.TextWriter writer = File.CreateText(filepath);
StreamReader scenFile = new StreamReader(filepath2);

while (!scenFile.EndOfStream)
{   (here will go my do-something-function)
         {
          blah blah
         }
    writer.WriteLine(scenFile.ReadLine().ToString();
    writer.Flush();
}
writer.Close();

然后,我得到了所有的线条。在代码中插入这一行之后,我检查了,我可以获得的唯一方法是键入" writer.Flush();"在每次迭代中。我试图将它插入循环中,以便我使用" writer.Flush();"每一定次数的迭代,我都尝试过从50到500.000的数字,而且我无法获得所有的线条。

问题是我将不得不使用实际文件的30倍的文件来执行操作,我需要尽快完成。有谁知道为什么会这样,如果有任何解决方案?

提前致谢

2 个答案:

答案 0 :(得分:1)

您无需两次刷新流。你应该能够在收盘前冲洗它......

while (!scenFile.EndOfStream)
{   (here will go my do-something-function)
 {
  blah blah
 }
 writer.WriteLine(scenFile.ReadLine().ToString();
}
writer.Flush();
writer.Close();

你是说这不起作用吗?

答案 1 :(得分:0)

解决。

在C#中,Flush()不会释放为缓冲区保留的内存。它还会将它写入底层流" (StreamWriter.Flush())。 因此,我所做的只是在$writer.Flush()之后调用$while

这是我的最终解决方案

    System.IO.TextWriter writer = File.CreateText(filepath);
    StreamReader scenFile = new StreamReader(filepath2);
    int count = 0;
    while (!scenFile.EndOfStream)
    {   (here will go my do-something-function)
     {
      blah blah
     }
     writer.WriteLine(scenFile.ReadLine().ToString();
     count ++;
     if(count == 500000)
     {
         writer.Flush();
         count = 0;
     }
    }
   writer.Flush();
   writer.Close();