StreamWriter – Don’t Forget To Flush
March 13, 2012 Leave a comment
I started working through the examples in the CLR Profiler documentation over the weekend. The 1st one looks like this:
StreamReader streamReader = new StreamReader(@"C:\Users\Jamie\Desktop\Demo1.dat"); string line; int lineCount = 0; int itemCount = 0; while ((line = streamReader.ReadLine()) != null) { lineCount++; string[] items = line.Split(); for (int i = 0; i < items.Length; i++) { itemCount++; } } streamReader.Close(); Console.WriteLine("{0} lines, {1} items", lineCount, itemCount);
To make that Demo1.dat file, I needed to write a quick function that spits out the expected values. I coded up this:
StreamWriter streamWriter = new StreamWriter(@"C:\Users\Jamie\Desktop\Demo1.dat"); string word = "0123456789 "; for(int i=0; i<2000; i++) { StringBuilder stringBuilder = new StringBuilder(); for(int j = 0; j < 10; j++) { stringBuilder.Append(word); } streamWriter.WriteLine(stringBuilder.ToString()); }
When I ran the function, the last chunks of data was not showing up:
I talked to my friend Rob Seder and he said “You dummy, you forgot to flush!*” Sure enough, when I set this:
streamWriter.AutoFlush = true;
the results came out as expected.
*He really didn’t say “You Dummy”, that is what I told myself once he mentioned it…..