title: WindowsError: [Error 183] Cannot create a file when that file already exists
body: <p>I am using the following script to add a copy right to all the files in the directories and subdirectories for a give directory passed as first argument ,am running the script as follows but running into below error...
  can anyone provide inputs on ohw to fix it?</p>
  
  <p>ERROR:-</p>
  
  <pre><code>C:\Dropbox\copyrights&gt;python Add_copyright.py .
  Traceback (most recent call last):
    File "Add_copyright.py", line 69, in &lt;module&gt;
      prepend_file(fullname, dirpath)
    File "Add_copyright.py", line 60, in prepend_file
      os.rename(temp_fname, fullname)
  WindowsError: [Error 183] Cannot create a file when that file already exists
  </code></pre>
  
  <p>CODE:-</p>
  
  <pre><code>import fnmatch
  import os
  import shutil
  import sys
  import tempfile
  
  file_patterns_to_match = ['*.c','*.h','*.cpp','*.txt']
  
  headertext = """/*
   * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
   *
   * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
   *
   *
   * Permission to use, copy, modify, and/or distribute this software for
   * any purpose with or without fee is hereby granted, provided that the
   * above copyright notice and this permission notice appear in all
   * copies.
   *
   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
   * PERFORMANCE OF THIS SOFTWARE.
   */
  """
  
  # make any newlines in headertext match the system line ending
  headertext = headertext.replace('\n', os.linesep)
  
  def want_this_file(fname):
      for pat in file_patterns_to_match:
          if fnmatch.fnmatch(fname, pat):
              return True
      return False
  
  def prepend_file(fullname, path):
      # with statement means temp file is written and closed at end of with
      with tempfile.NamedTemporaryFile(dir=path, delete=False) as out_file:
          # get the name immediately
          temp_fname = out_file.name
  
          try:
              # use binary mode to avoid newline translations
              with open(fullname, "rb") as in_file:
                  out_file.write(headertext)
                  shutil.copyfileobj(in_file, out_file)
          except Exception:
              # on any error, clean up temp file and re-raise exception
              try:
                  os.remove(temp_fname)
              except Exception:
                  print("unable to clean up temp file: " + temp_fname)
                  pass
              raise
      # rename temp file to fullname, clobbering original
      os.rename(temp_fname, fullname)
  
  
  start_directory = sys.argv[1]
  
  for dirpath, dirnames, filenames in os.walk(start_directory):
      for fname in filenames:
          if want_this_file(fname):
              fullname = os.path.join(dirpath, fname)
              prepend_file(fullname, dirpath)
  </code></pre>