title: Difference between try{..}catch{...} with finally and without it
body: <p>What is the difference between code like this:</p>
  
  <pre><code>string path = @"c:\users\public\test.txt";
  System.IO.StreamReader file = new System.IO.StreamReader(path);
  char[] buffer = new char[10];
  try
  {
      file.ReadBlock(buffer, index, buffer.Length);
  }
  catch (System.IO.IOException e)
  {
      Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
  }
  
  finally
  {
      if (file != null)
      {
          file.Close();
      }
  }
  </code></pre>
  
  <p>and this:</p>
  
  <pre><code>string path = @"c:\users\public\test.txt";
  System.IO.StreamReader file = new System.IO.StreamReader(path);
  char[] buffer = new char[10];
  try
  {
      file.ReadBlock(buffer, index, buffer.Length);
  }
  catch (System.IO.IOException e)
  {
      Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
  }
  if (file != null)
  {
      file.Close();
  }
  </code></pre>
  
  <p>Is really finally block necessary in this construction. Why Microsoft provided such construction? It seems to be redundant. Isn't it?</p>