鱼C论坛

 找回密码
 立即注册
查看: 3592|回复: 7

[已解决]硬盘根目录不可访问的PermissionError: [WinError 5] 拒绝访问。: 'G:\\\\$Recycle...

[复制链接]
发表于 2022-10-22 18:41:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
硬盘根目录不可访问的PermissionError: [WinError 5] 拒绝访问。: 'G:\\\\$Recycle...
读取G:\\根目录时发生错误
list1=os.listdir(pathName)代码在此处发生错误,原因是权限不够,
如何添加权限检测代码,跳过不可访问的文件夹
如果读c:\\ 盘里面的不可访问的文件更多,凭借字符串对比略过文件夹明显不够用
感谢高手指点
最佳答案
2022-10-22 19:58:42
zy8818 发表于 2022-10-22 19:45
#递归获取目录下所有文件夹路径(包括子文件夹)-》list
def getAllChildFolder(pathName):
    #print(p ...

def getAllChildFolder(pathName):
    wenjianjiapath = []
    try:
        for each in os . listdir(pathName):
            newpath = os . path . join(pathName , each)
            if os . path . isdir(newpath) :
                wenjianjiapath . append(newpath)
                wenjianjiapath . extend(getAllChildFolder(newpath))
    except:
        pass
    return wenjianjiapath
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-22 19:22:55 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2022-10-22 19:37 编辑

        这一句
        os . listdir()
        属于风险语句,应该使用异常捕获机制,这样,在函数调用出现错误时,程序不至于直接退出。
try:
    list1=os.listdir(pathName)    # 风险语句
    语句1                                      # 如果风险语句平安度过,就会从这里继续                   
    语句2
    语句3
    ......
except:                                       #  如果风险语句执行错误,就会从这里继续执行
    pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-22 19:37:27 | 显示全部楼层
jackz007 发表于 2022-10-22 19:22
这一句

        属于风险语句,应该使用异常捕获机制,这样,在函数调用出现错误时,程序不至于 ...

    list1=[]
    try:
        list1=os.listdir(pathName)
    except:
        pass

改好了一样出错
请输入路径:G:\\

    list1=os.listdir(pathName)
PermissionError: [WinError 5] 拒绝访问。: 'G:\\\\$Recycle.Bin\\S-1-5-18'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-22 19:40:05 | 显示全部楼层
zy8818 发表于 2022-10-22 19:37
list1=[]
    try:
        list1=os.listdir(pathName)

           把你的代码贴全,至少是整个递归函数的全部代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-22 19:45:24 | 显示全部楼层
jackz007 发表于 2022-10-22 19:40
把你的代码贴全,至少是整个递归函数的全部代码。

#递归获取目录下所有文件夹路径(包括子文件夹)-》list
def getAllChildFolder(pathName):
    #print(pathName)
    list1=os.listdir(pathName)
    wenjianjiapath=[]
    listTemp=[]
    for each in list1:
        #忽略系统高级访问权限文件
        if each.upper()=="$Recycle.Bin".upper() or each.upper()=="Recovery".upper() or each.upper()=="System Volume Information".upper():
            continue
        newpath=os.path.join(pathName,each)
        if os.path.isdir(newpath)==True:
            wenjianjiapath.append(newpath)
            wenjianjiapath.extend(getAllChildFolder(newpath))
    return wenjianjiapath
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-22 19:58:42 | 显示全部楼层    本楼为最佳答案   
zy8818 发表于 2022-10-22 19:45
#递归获取目录下所有文件夹路径(包括子文件夹)-》list
def getAllChildFolder(pathName):
    #print(p ...

def getAllChildFolder(pathName):
    wenjianjiapath = []
    try:
        for each in os . listdir(pathName):
            newpath = os . path . join(pathName , each)
            if os . path . isdir(newpath) :
                wenjianjiapath . append(newpath)
                wenjianjiapath . extend(getAllChildFolder(newpath))
    except:
        pass
    return wenjianjiapath
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 16:31:22 | 显示全部楼层
本帖最后由 zy8818 于 2022-10-23 16:34 编辑


非常感谢,但是我还不清楚这个try的原理
如果try..except中间代码出错时正好在for循环执行到一半的时候,
这个时候是直接return,还是继续执行未执行完的for循环
因为读取文件字节数的时候也会出错,所以肯定有卡在for循环一半的时候出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 16:40:28 | 显示全部楼层
zy8818 发表于 2022-10-23 16:31
非常感谢,但是我还不清楚这个try的原理
如果try..except中间代码出错时正好在for循环执行到一半的时 ...


        每个有可能导致灾难的语句都必须安排进 try ... except,让它们各自都有对应的风险管控措施,只有这样,才能保证代码顺畅执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表