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 倍的文件执行操作,我需要尽快完成。有谁知道为什么会这样,是否有任何解决方案?
提前致谢
您无需冲洗流两次。 您应该能够在收盘前冲洗它...
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();