# Streams

When reading from a stream, if you need to go back to the beginning of the stream, you can use the `Stream.Position` property.

    using (var stream = new File.OpenRead("path\\to\\file"))
    using (var reader = new StreamReader(stream))
    {
    	// Read file content.
    	var content = reader.ReadToEnd();

    	// Go back to beginning of the stream.
    	stream.Position = 0;

    	// Read file content again.
    	content = reader.ReadToEnd();
    }

When writing to a file, you need to flush the writer for the data to be written to the stream. `StreamWriter` contains an internal buffer and the data is only written to the stream when the buffer is full, or `Flush` is called. `Flush` is automatically called when a `using` block exits.

    using (var stream = new File.OpenWrite("path\\to\\file"))
    using (var writer = new StreamWriter(stream))
    {
    	writer.WriteLine("Foo");
    	writer.Flush(); // Data is written from the writer buffer to the stream.
    } // Flush is also called here.