0

以下代码已在 activestate python 帮助文件中给出。此代码用于递归删除文件夹中的文件,然后删除文件夹本身。请指出其中的错误,因为我想使用 python 使用 win32 api

import win32con
import win32api
import os

def del_dir(path):
    for file_or_dir in os.listdir(path):
        if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
            del_dir(file_or_dir) #recursive call to function again
        else:
            try:
                os.remove(file_or_dir) #it's a file,delete is
            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
4

1 回答 1

1

您的程序的问题与 win32api 无关。它失败是因为每当您调用任何操作系统函数(os.remove、win32api.SetFileAttributes)时,您只传递部分名称(即“路径”之后的部分。将函数的第一行更改为:

def del_dir(path):
    for file_or_dir in os.listdir(path):

改成:

def del_dir(path):
    for x in os.listdir(path):
        file_or_dir = os.path.join(path,x)

其余的都是一样的。顺便说一句,这对于删除整个目录或递归遍历文件夹层次结构确实是一个糟糕的示例。使用 os.walk 获取简单的代码。

一般来说,win32api 和 win32con 工作得很好。打开一个 python shell 并尝试这个更简单的代码:

>>> import win32api
>>> import win32con
>>> win32api.MessageBox(0, "hello win32api", "win32api", win32con.MB_OK)
于 2012-10-28T08:35:23.693 回答