Saturday 11 August 2018

c# - How do I generate a stream from a string?



I need to write a unit test for a method that takes a stream which comes from a text file. I would like to do do something like this:



Stream s = GenerateStreamFromString("a,b \n c,d");


Answer



public static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}



Don't forget to use Using:



using (var stream = GenerateStreamFromString("a,b \n c,d"))
{
// ... Do stuff to stream
}






About the StreamWriter not being disposed. StreamWriter is just a wrapper around the base stream, and doesn't use any resources that need to be disposed. The Dispose method will close the underlying Stream that StreamWriter is writing to. In this case that is the MemoryStream we want to return.



In .NET 4.5 there is now an overload for StreamWriter that keeps the underlying stream open after the writer is disposed of, but this code does the same thing and works with other versions of .NET too.



See Is there any way to close a StreamWriter without closing its BaseStream?


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...