 <p>You don't have to call <code>Flush()</code> on <code>Close()/Dispose()</code>, <code>FileStream</code> will do it for you as you can see from its <em>source code</em>: </p> <p><a href="http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs,e23a38af5d11ddd3">http://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs,e23a38af5d11ddd3</a></p> <pre><code> [System.Security.SecuritySafeCritical] // auto-generated protected override void Dispose(bool disposing) { // Nothing will be done differently based on whether we are // disposing vs. finalizing. This is taking advantage of the // weak ordering between normal finalizable objects &amp; critical // finalizable objects, which I included in the SafeHandle // design for FileStream, which would often "just work" when // finalized. try { if (_handle != null &amp;&amp; !_handle.IsClosed) { // Flush data to disk iff we were writing. After // thinking about this, we also don't need to flush // our read position, regardless of whether the handle // was exposed to the user. They probably would NOT // want us to do this. if (_writePos &gt; 0) { FlushWrite(!disposing); // &lt;- Note this } } } finally { if (_handle != null &amp;&amp; !_handle.IsClosed) _handle.Dispose(); _canRead = false; _canWrite = false; _canSeek = false; // Don't set the buffer to null, to avoid a NullReferenceException // when users have a race condition in their code (ie, they call // Close when calling another method on Stream like Read). //_buffer = null; base.Dispose(disposing); } } </code></pre>