我正在尝试编写一个检测器,检查是否可以使用shutil.rmtree删除某个目录。我有一个部分代码完成如下,现在工作部分。
此代码现在能够在目标文件夹下的任何.exe文件仍在运行时发出警告。但是,如果编辑器打开文件夹下的任何特定文件,则此代码仍无法标记警告(这是导致目录无法删除的另一个原因)。任何指导将不胜感激。提前致谢
注意:我使用open方法检查是否有锁定文件。
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)
答案 0 :(得分:2)
在Windows上无法确定文件删除是成功还是失败。该文件可以完全允许的共享模式打开,这意味着打开文件的另一次尝试将成功(无论您请求什么类型的访问)。
判断文件是否可以删除的唯一方法是实际尝试。
即使有一个准确的预告方式,一旦你获得了信息,它就会立即过时。例如,在您调用list_locked_files
之后,程序可能会打开该目录中的另一个文件,这会导致rmtree()
失败。