错误 5:移动文件时访问被拒绝
我这几天一直在做一个程序,昨晚开始遇到一个错误,现在卡住了。我已经看过这里的其他问题,但都没有解决我的问题。
我正在用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
来移动它们。