您好我有一个巨大的文档,我必须使用.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倍的文件来执行操作,我需要尽快完成。有谁知道为什么会这样,如果有任何解决方案?
提前致谢
答案 0 :(得分:1)
您无需两次刷新流。你应该能够在收盘前冲洗它......
while (!scenFile.EndOfStream)
{ (here will go my do-something-function)
{
blah blah
}
writer.WriteLine(scenFile.ReadLine().ToString();
}
writer.Flush();
writer.Close();
你是说这不起作用吗?
答案 1 :(得分:0)
解决。
在C#中,Flush()不会释放为缓冲区保留的内存。它还会将它写入底层流" (StreamWriter.Flush())。
因此,我所做的只是在$writer.Flush()
之后调用$while
。
这是我的最终解决方案
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();