title: System.IO.IOException: file used by another process
body: <p>I've been working on this small piece of code that seems trivial but still, i cannot really see where is the problem. My functions do a pretty simple thing. Opens a file, copy its contents, replace a string inside and copy it back to the original file (a simple search and replace inside a text file then).
  I didn't really know how to do that as I'm adding lines to the original file, so I just create a copy of the file, (file.temp) copy also a backup (file.temp) then delete the original file(file) and copy the file.temp to file.
  I get an exception while doing the delete of the file.
  Here is the sample code:</p>
  
  <pre><code>private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
      {
          Boolean result = false;
          FileStream fs = new FileStream(file.FullName + ".tmp", FileMode.Create, FileAccess.Write);
          StreamWriter sw = new StreamWriter(fs);
  
          StreamReader streamreader = file.OpenText();
          String originalPath = file.FullName;
          string input = streamreader.ReadToEnd();
          Console.WriteLine("input : {0}", input);
  
          String tempString = input.Replace(extractedMethod, modifiedMethod);
          Console.WriteLine("replaced String {0}", tempString);
  
          try
          {
              sw.Write(tempString);
              sw.Flush();
              sw.Close();
              sw.Dispose();
              fs.Close();
              fs.Dispose();
              streamreader.Close();
              streamreader.Dispose();
  
              File.Copy(originalPath, originalPath + ".old", true);
              FileInfo newFile = new FileInfo(originalPath + ".tmp");
              File.Delete(originalPath);
              File.Copy(fs., originalPath, true);
  
              result = true;
          }
          catch (Exception ex)
          {
              Console.WriteLine(ex);
          }
  
          return result;
      }`
  </code></pre>
  
  <p>And the related exception</p>
  
  <pre><code>System.IO.IOException: The process cannot access the file 'E:\mypath\myFile.cs' because it is being used by another process.
     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
     at System.IO.File.Delete(String path)
     at callingMethod.modifyFile(FileInfo file, String extractedMethod, String modifiedMethod)
  </code></pre>
  
  <p>Normally these errors come from unclosed file streams, but I've taken care of that. I guess I've forgotten an important step but cannot figure out where.
  Thank you very much for your help,</p>