在使用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)
成功运行