views:

47

answers:

3

In one of my scripts, I need to delete a file that could be in use at the time. I know that I can't remove the file that is in use until it isn't anymore, but I also know that I can mark the file for removal by the Operating System (Windows XP). How would I do this in Python?

+1  A: 

Use the MoveFileEx function:

If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and lpNewFileName is NULL, MoveFileEx registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.

Greg Hewgill
+3  A: 
import win32file
import win32api
win32file.MoveFileEx("/path/to/lockedfile.ext", None ,
                 win32file.MOVEFILE_DELAY_UNTIL_REBOOT)
Paulo Scardine
Thanks! Who knew that this would be so easy! You saved my entire application, @Paulo Scardine!
Zachary Brown
+3  A: 

...and another version which doesn't depend on pywin32 binaries.

import ctypes
MOVEFILE_DELAY_UNTIL_REBOOT = 4

ctypes.windll.kernel32.MoveFileExA("/path/to/lockedfile.ext", None,
                                       MOVEFILE_DELAY_UNTIL_REBOOT)
lunixbochs
@linuxbochs: Nice!
Paulo Scardine