PermissionError: [WinError 5] 拒绝访问。OSError: [WinError 17] 系统无法将文件移到不同的磁盘驱动器。

在使用shutil.move()剪切文件时报错OSError: [WinError 17] 系统无法将文件移到不同的磁盘驱动器。

PermissionError: [WinError 5] 拒绝访问。

检查发现文件成功复制到目标文件夹,但源文件未被删除。故直接定位问题为剪切时成功复制但删除失败。

一开始以为是文件还在剪切的过程,导致被占用无法关闭所以无法删除,但使用sleep等待一段时间后依然报此错误,经过一番查找可能是以下原因:

1.文件被其他进程占用无法删除。

2.文件被设置只读属性,无法删除。

3.用户无权限。

已排除第一点,手动可以删除文件,排除第三点。

锁定第二点,使用os cmd指令更改文件的状态在进行删除(可以选择直接修改shutil源代码),或者将shutil.move()拆成shutil.copy()与os.remove()

import os,shutil,stat
def ifcopy(file,targetpath):
    tarr = os.path.join(targetpath,os.path.basename(file))
    while True:
        time.sleep(.5)
        if os.path.exists(tarr):
            try:
                os.remove(tarr)
            except:
                os.chmod(tarr, stat.S_IWRITE)
                os.remove(tarr)
            break
shutil.copy(file, targetpath)
ifcopy(file, targetpath)

成功运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值