You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用shutil.rmtree删除文件夹内容后仍触发[WinError 5]访问拒绝异常

解决shutil.rmtree删除文件夹时的WinError 5访问拒绝问题

调用shutil.rmtree()时,即便文件夹内容已被清空,但删除文件夹本身时抛出[WinError 5] Access is denied异常,常见原因有两个:

  • 目标文件夹被其他进程占用(比如资源管理器正打开该文件夹、杀毒软件正在后台扫描)
  • 文件夹或其内容带有只读属性,当前用户权限不足无法删除文件夹本身

解决方法

1. 关闭占用文件夹的进程

先检查并关闭所有可能访问该文件夹的程序(比如对应资源管理器窗口、打开该文件夹的编辑器、杀毒软件实时扫描),再重新运行删除代码。

2. 自定义错误处理函数,强制修改权限后删除

通过rmtree的onerror参数传入回调函数,遇到权限问题时自动修改文件/文件夹权限,再重试删除:

from shutil import rmtree
import os
import stat

def handle_readonly_error(func, path, exc_info):
    # 移除只读属性,赋予写入权限
    os.chmod(path, stat.S_IWRITE)
    # 重新执行原删除操作
    func(path)

my_folder = 'aaa/bbb/'
try:
    rmtree(my_folder, onerror=handle_readonly_error)
except Exception as err:
    print(err)

3. 手动逐层删除内容后再删空文件夹

如果上述方法无效,可以手动遍历文件夹,先删除所有文件和子文件夹,最后删除空的目标文件夹:

import os
import stat

my_folder = 'aaa/bbb/'

# 从最底层开始删除文件和子文件夹
for root, dirs, files in os.walk(my_folder, topdown=False):
    # 删除文件
    for file_name in files:
        file_path = os.path.join(root, file_name)
        os.chmod(file_path, stat.S_IWRITE)
        os.remove(file_path)
    # 删除子文件夹
    for dir_name in dirs:
        dir_path = os.path.join(root, dir_name)
        os.chmod(dir_path, stat.S_IWRITE)
        os.rmdir(dir_path)

# 最后删除空的目标文件夹
try:
    os.rmdir(my_folder)
except Exception as err:
    print(err)

内容的提问来源于stack exchange,提问作者eltal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:05:17