C# TextWriter对象未写入完整文档
嗨,我有一个巨大的文档,我必须使用C#in.NET逐行阅读。 然后执行一个操作,然后再次写入该行 我正在用一个较小的文件测试代码,实际文件包含992.482行。 我已尝试使用以下代码进行测试: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() 然后,我得到了所有的线。在代码中插入这一行之后,我检查,我能获得的
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”。。。