title: throw new Exception while keeping stack trace and inner exception information
body: <p>I have a FileSystemWatch program that I'm working on and if there's an error copying a file, I want to be able to know which file it failed on. At the same time, I'd like to be able to retain the stack trace, as well as the inner exception information.</p>
  
  <pre><code>                if (!found)
              {
                  try
                  {
                      File.Copy(file, Path.Combine(watchDirectory, filename));
                  }
                  catch (Exception ex)
                  {
                      WriteToLog(new Exception(
                          String.Format("An error occurred syncing the Vault location with the watch location. Error copying the file {0}. Error = {1}", file, ex.Message), ex.InnerException));
                  }
              }
  </code></pre>
  
  <p>So, the exception that gets passed, I still want to have the stacktrace info that, the inner exception info, but I want the "message" to be my custom message that contains which file it failed on, while also displaying the "real" message that was thrown by the original exception.</p>