基本上我有一个用Python 2.6编写的FileExplorer类。它工作得很好,我可以浏览驱动器,文件夹等。 但是,当我到达我的脚本所基于的特定文件夹'C:\ Documents and Settings / 。*'*,os.listdir时,会抛出此错误:
WindowsError:[错误5]访问被拒绝:'C:\ Documents and Settings / 。'
为什么?是因为这个文件夹是只读的吗?或者Windows正在保护并且我的脚本无法访问?!
以下是违规代码(第3行):
def listChildDirs(self):
list = []
for item in os.listdir(self.path):
if item!=None and\
os.path.isdir(os.path.join(self.path, item)):
print item
list.append(item)
#endif
#endfor
return list
答案 0 :(得分:2)
在Vista及更高版本中,C:\ Documents and Settings是一个联结,而不是真正的目录。
你甚至不能直接dir
。
C:\Windows\System32>dir "c:\Documents and Settings"
Volume in drive C is OS
Volume Serial Number is 762E-5F95
Directory of c:\Documents and Settings
File Not Found
遗憾的是,使用os.path.isdir()
,它将返回True
>>> import os
>>> os.path.isdir(r'C:\Documents and Settings')
True
您可以查看这些处理Windows中符号链接的答案。
答案 1 :(得分:0)
这可能是目录访问的权限设置,甚至是目录不存在。您可以以管理员身份运行脚本(即访问所有内容)或尝试以下内容:
def listChildDirs(self):
list = []
if not os.path.isdir(self.path):
print "%s is not a real directory!" % self.path
return list
try:
for item in os.listdir(self.path):
if item!=None and\
os.path.isdir(os.path.join(self.path, item)):
print item
list.append(item)
#endif
#endfor
except WindowsError:
print "Oops - we're not allowed to list %s" % self.path
return list
顺便问一下,你听说过os.walk
吗?看起来它可能是你想要实现的目标的捷径。