0

我有一个执行 20,000 次的 foreach 语句,在每次迭代中我必须在文件中写入一行。问题是,有没有办法在写入文件时打开文件。直到并且除非我关闭流,否则我看不到文本文件中的文本。但我想在不关闭流的情况下查看文本。请任何人都可以帮助我......

提前谢谢

var fileName = Path.GetTempPath();
streamWriter sw=new streamWriter(fileName + "\\sampleFile.txt",true);
for (int i = 0; i <= 20000; i++)
{                    
   sw.WriteLine("vinod" + i);                   
}
4

3 回答 3

2

每次写入文件后,在流上调用 .Flush() 。这会将文本推送到文件中,以便您可以在程序执行期间看到它。应该注意的是,这可能是一种性能消耗,所以除非出于某种原因必须这样做,否则不要这样做。

于 2013-11-08T12:56:47.460 回答
1

如果您可以一次计算文件的内容并且不必连续向其中记录信息,则在内容准备好时将文本写入文件。

例如:

var fileName = Path.GetTempPath();
List<string> lines = new List<string>();
for (int i = 0; i <= 20000; i++)
{                    
   lines.Add("vinod" + i);                   
}

File.WriteAllLines(fileName, lines);

否则,请为您的流或使用刷新File.AppendAllText(请参阅MSDN)。

于 2013-11-08T13:00:36.063 回答
1

我不会使用文件作为查看器的来源。如果你正在尝试做loggerviewer,那么考虑改变设计:

  1. 制作某种源(但与文件不同,它可以是文件,但根据给定的条件它不是最佳的,因为您将经常更新)并使其可供两者访问:记录器和查看器。例如,使用 a string,两者都可以访问。

  2. 以某种方式制作事件并制作观众,它将形成他自己的观看源。

如果查看器是ListBox(例如),那么在第二种情况下,20000 个项目就可以了。在文件中添加一行并同时发送一个事件ListBox,以更新其内容。没必要Flush()什么的。

每当它变大时,或者如果您为查看器提供高级功能:过滤、重新加载等 - 第一种情况会更好(虚拟模式非常适合ListBox)。

于 2013-11-08T14:16:49.650 回答