Daniel
Daniel

Reputation: 631

Python: Detect directory that cannot be detected in Windows 7

I am trying to write a detector that checks if a certain directory can be deleted using shutil.rmtree. I have a partial code finished as below that now works partial.

This code is now able to gives warning when any .exe files under the target folder is still running. But, this code is not yet able to flag warnings if any particular file under a folder is opened by an editor (which is another cause that makes a directory not deletable). Any guidance will be appreciated. Thanks in advance

Note: I've used open method to check for any locked file.

def list_locked_files(dir):

    isLocked = False
    for name in os.listdir(dir):
        uni_name = unicode(name)
        fullname = dir + u'/' + uni_name

        if os.path.isdir(fullname):
            list_locked_files(fullname)
        else:
            try:
                f = open(fullname, 'r+')
                f.close()
            except IOError:
                print fullname + u' is locked!'
                isLocked = True
   if isLocked is True:
        print u'Please close the files/dir above !'
        sys.exit(0)

Upvotes: 1

Views: 124

Answers (1)

Greg Hewgill
Greg Hewgill

Reputation: 993125

It is not necessarily possible to determine whether a file deletion will succeed or fail on Windows. The file could be opened in a fully permissive share mode which means another attempt to open the file will succeed (no matter what kind of access you request).

The only way to tell whether a file can be deleted is to actually try it.

Even if there were an accurate way to tell beforehand, once you get the information it is instantly out of date. For example, after you call list_locked_files, a program could open another file in that directory which would cause rmtree() to fail.

Upvotes: 2

Related Questions