错误 5:移动文件时访问被拒绝

1 投票
2 回答
1814 浏览
提问于 2025-04-18 14:44

我这几天一直在做一个程序,昨晚开始遇到一个错误,现在卡住了。我已经看过这里的其他问题,但都没有解决我的问题。

我正在用shutil把文件从一个驱动器移动到另一个驱动器,刚开始的时候一切都很顺利,但现在开始出现这个错误:

编辑:我刚发现其实文件是被移动了,但之后才出现这个错误。

Traceback (most recent call last):
  File "C:\Users\DC\Desktop\Prototype\Prototype", line 9, in <module>
    shutil.move(src, dst)
  File "C:\Python27\lib\shutil.py", line 300, in move
    rmtree(src)
  File "C:\Python27\lib\shutil.py", line 256, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "C:\Python27\lib\shutil.py", line 254, in rmtree
    os.rmdir(path)
WindowsError: [Error 5] Access is denied: 'E:'

这是我的代码片段。

import os
import time

time = time.strftime("%H%M%S")
src = "E:"
dst = "C:\Users\DC\Desktop\Data_" + str(time)

import shutil
shutil.move(src, dst)
print 'Done'

2 个回答

0

请检查对 E:\ 的权限。

错误提示显示,运行这段代码的用户没有访问 E 盘的权限。

1

你是在尝试移动 E: 盘里的文件,还是整个盘呢?:-)

先检查一下 E: 盘是不是空的,如果是空的,那就没什么可以移动的。如果你想移动的是文件,而不是整个盘,可以使用通配符。

提示:使用 E:\*.*

更新:

在你提到的异常信息中,shutil.py 的第82行似乎只是简单地调用了 open 系统调用:

with open(src, 'rb') as fsrc:

看起来它无法处理 Windows 的驱动器或像 e:\\*.* 这样的模式:

fo = open(r'D:\*.*','rb')

D:\>python testopen.py
Traceback (most recent call last):
  File "testopen.py", line 2, in <module>
    fo = open(r'D:\*.*','rb')
IOError: [Errno 22] invalid mode ('rb') or filename: 'D:\\*.*'

不过,对于你来说,有一个非常简单的解决办法:使用 os.listdir

>>> import os
>>> os.listdir('D:\\')
['Videos', 'Pictures', 'Music', 'Documents', ...]

os.listdir 会返回一个特定目录或 Windows 驱动器中的文件和文件夹的列表。一旦你有了这个列表,就可以对每个项目使用 shutil.move 来移动它们。

撰写回答