【问题标题】:TextWriter Object not writing full documentTextWriter 对象未写入完整文档
【发布时间】:2016-02-04 10:41:45
【问题描述】:

您好,我有一个巨大的文档,我必须在 .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 倍的文件执行操作,并且我需要尽可能快地执行此操作。有谁知道这是为什么,有什么解决办法吗?

提前致谢

【问题讨论】:

  • 您是否尝试在while 循环之后但在关闭编写器之前调用writer.Flush()
  • 是的,实际上我在程序的最后关闭了编写器。我已经编辑了代码以使其更清晰
  • 好吧,你说对了。我没有正确理解它。我正在写一个关于它的解释,只需复制并粘贴您的用户名,以防您喜欢它,因为它是您的解决方案。很抱歉这个错误,非常感谢

标签: c# .net buffer


【解决方案1】:

您不需要刷新流两次。您应该能够在关闭之前将其冲洗掉...

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

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

【讨论】:

  • 是的,由于文件的大小,它不起作用。使用我提出的解决方案,它可以工作,我需要小心,因为我正在处理 7000 万行的关键文件......
  • 嗯。行。很高兴知道。早在 2.0 天,流会在满时自动刷新。必须是 .NET 中的某种“尼特”...
【解决方案2】:

解决了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多