Recipe20.8.Capturing Output from the Standard Output Stream


Recipe 20.8. Capturing Output from the Standard Output Stream

Problem

You want to capture output that is going to the standard output stream from within your C# program.

Solution

Use the Console.SetOut method to capture and release the standard output stream. SetOut sets the standard output stream to whatever System.IO.TextWriter-based stream it is handed. To capture the output to a file, create a StreamWriter to write to it, and set that writer using SetOut. Now when Console.WriteLine is called, the output goes to the StreamWriter, not to stdout as shown here:

 try {     Console.WriteLine("Stealing standard output!");     using (StreamWriter writer = new StreamWriter(@"c:\log.txt"))     {         // Steal stdout for our own purposes…         Console.SetOut(writer);         Console.WriteLine("Writing to the console… NOT!");         for (int i = 0; i < 10; i++)             Console.WriteLine(i);     } } catch(IOException e) {     Debug.WriteLine(e.ToString());     return ; } 

To restore writing to the standard output stream, create another StreamWriter. This time, call the Console.OpenStandardOutput method to acquire the standard output stream and use SetOut to set it once again. Now calls to Console.WriteLine appear on the console again.

 // Recover the standard output stream so that a // completion message can be displayed.     using (StreamWriter standardOutput =                          new StreamWriter(Console.OpenStandardOutput()))     {     standardOutput.AutoFlush = true;     Console.SetOut(standardOutput);     Console.WriteLine("Back to standard output!"); } 

The console output from this code looks like this:

 Stealing standard output! Back to standard output! 

log.txt contains the following after the code is executed:

 Writing to the console… NOT! 0 1 2 3 4 5 6 7 8 9 

Discussion

Redirecting the standard output stream inside of the program may seem a bit antiquated. But consider the situation when you're using another class that writes information to this stream. You don't want the output to appear in your application, but you have to use the class. This could also be useful if you create a small launcher application to capture output from a console application.

See Also

See the "Console.SetOut Method," "Console.OpenStandardOutput Method," and "StreamWriter Class" topics in the MSDN documentation.



C# Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2004
Pages: 424

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net