Python的win32访问文件属性以启用删除
有时您可能需要执行一些操作,例如删除整个目录树。Python有一些很棒的实用程序可以做到这一点,但具有特殊属性的文件通常无法删除。
为了解决这个问题,您需要使用对SetFileAttributes的win32调用作为普通文件。
C++调用如下所示:
BOOL SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);
您为它提供了两个参数,即文件名和特定属性,并返回是否成功。
相应的python调用是:int=win32api。SetFileAttributes(路径名,属性)
唯一的问题是你从哪里得到属性。它包含在非常方便的win32con模块中,特别是win32con.FILEATTRIBUTE*。您可以将文件设置为只读、存档、隐藏等。我们关注的是将其设置为正常,因此我们希望:win32con.file_ATTRIBUTE_normal
下面的示例可能很有用,但当然要小心,因为它会删除很多内容。这是一个递归函数。该示例还使用了os模块中的一些方便的函数。
实例
以下是如何删除目录树的基本示例:
import os
import win32api
import win32con
def del_dir(self, path):
for file in os.listdir(path):
file_or_dir = os.path.join(path, file)
if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
del_dir(file_or_dir) # it's a directory reucursive call to function again
else:
try:
os.remove(file_or_dir) # it's a file, delete it
except:
# probably failed because it is not a normal file
win32api.SetFileAttributes(file_or_dir, win32con.FILE_ATTRIBUTE_NORMAL)
os.remove(file_or_dir) # it's a file, delete it
os.rmdir(path) # delete the directory here