C# TextWriter对象未写入完整文档

C# TextWriter对象未写入完整文档,c#,.net,buffer,C#,.net,Buffer,嗨,我有一个巨大的文档,我必须使用C#in.NET逐行阅读。 然后执行一个操作,然后再次写入该行 我正在用一个较小的文件测试代码,实际文件包含992.482行。 我已尝试使用以下代码进行测试: while (!scenFile.EndOfStream) { writer.WriteLine(scenFile.ReadLine().ToString(); } 我只能写992.474。然后我尝试使用writer.Flush() 然后,我得到了所有的线。在代码中插入这一行之后,我检查,我能获得的

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

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

while (!scenFile.EndOfStream)
{   writer.WriteLine(scenFile.ReadLine().ToString();
}
我只能写992.474。然后我尝试使用writer.Flush()

然后,我得到了所有的线。在代码中插入这一行之后,我检查,我能获得的唯一方法是在每次迭代中键入“writer.Flush();”。我曾尝试将其插入循环中,以便使用“writer.Flush();”,每次特定的迭代次数,我都尝试从50到500.000的数字,但我无法获得所有的行

问题是,我必须使用一个实际文件的30倍来执行操作,我需要尽可能快地执行。有人知道这是为什么吗?有没有解决办法

提前感谢

已解决

在C中,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();
解决了

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

你不需要冲洗两次水流。你应该能在收盘前把它冲洗干净

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

您的意思是,不知何故,这不起作用?

您不需要冲洗两次流。你应该能在收盘前把它冲洗干净

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

你的意思是,不知何故,这不起作用吗?

你有没有试过在
while
循环之后但在关闭编写器之前调用
writer.Flush()
?是的,实际上我在程序的最后关闭编写器。我已经编辑了代码,试图让它更清晰一点好吧,你说得对。我没有完全理解它。我正在写一个关于它的解释,只要复制并粘贴你的用户名,以防你喜欢它,因为它是你的解决方案。很抱歉出错,谢谢。您是否在
while
循环之后但在关闭编写器之前尝试调用
writer.Flush()
?是的,实际上我在程序的最后关闭了编写器。我已经编辑了代码,试图让它更清晰一点好吧,你说得对。我没有完全理解它。我正在写一个关于它的解释,只要复制并粘贴你的用户名,以防你喜欢它,因为它是你的解决方案。对于这个错误,非常抱歉,谢谢。是的,由于文件的大小,它无法工作。使用我提出的解决方案,它是有效的,我需要小心处理7000万行的关键文件…嗯。好啊很高兴知道。在2.0天后,当流满时会自动冲洗。一定是.NET中的某种“nit”…是的,由于文件的大小,它不起作用。使用我提出的解决方案,它是有效的,我需要小心处理7000万行的关键文件…嗯。好啊很高兴知道。在2.0天后,当流满时会自动冲洗。一定是.NET中的某种“nit”。。。