TextWriter 对象未写入完整文档

本文关键字:文档 对象 TextWriter | 更新日期: 2023-09-27 18:33:07

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

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

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

我只能写992.474。然后我尝试使用作家。同花顺();

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 倍的文件执行操作,我需要尽快完成。有谁知道为什么会这样,是否有任何解决方案?

提前致谢

TextWriter 对象未写入完整文档

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

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

你是说这不知何故不起作用吗?

已解决。

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

这是我的最终解决方案将是

    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();