【问题标题】:Removing and listing directories above the character limit删除和列出超过字符限制的目录
【发布时间】:2015-04-14 00:00:25
【问题描述】:

我创建了一个超过字符限制的目录,在目录前添加了“\\?\”,但我无法使用shutil.rmtree 删除它或使用os.walk 列出它。

shutil.rmtree("folder") 出现以下错误:

WindowsError:[错误3]系统无法找到指定的路径:“文件夹\ CAAAAAAAAAB2iMan9VH4-0fxO4JOiT43bz9XVbQUoCcdOJTk1WRcPA ++ \ BwAAAAAAAACXEWzr-_xJujcfpbaeAa-zNMqou1c_EtOH1lGXEMaL8w ++ \ CAAAAAAAAACq0GkU9kGYNVDcaXAZ78ut8FSHTvE45Ra69qN495R6Fw ++ \ CgAAAAAAAAAsOJ6oX-y6iRcg2F3KB4HGi6kcWnU2QPO2CEKsJUA4-G ++ P>

有没有可以用来删除该目录的功能?

谢谢。

【问题讨论】:

标签: python windows directory


【解决方案1】:

正如eryksun 所指出的,以及ivan_pozdeev 链接的页面上的链接中的更多详细信息,解决方案总结如下:

如果路径长度超过 260 个字符,shutil.rmtree 无法删除该文件。

假设

directory = "some path that is more than 260 characters"

尝试shutil.rmtree(directory) 将失败并出现*** WindowsError: [Error 3] The system cannot find the path specified: "some path that is more than 260 characters" 错误。不清楚该文件是否存在以及路径长度是真正的问题。

解决方案是将\\?\ 添加到路径,我因此为任意路径执行此操作:

shutil.rmtree(ur'\\?\ '.strip()+ directory, onerror=onerror)

请注意,即使使用r'' 语法,字符串也可能不会以斜杠结尾,因此我通过添加一个空格然后strip()-ing 字符串来解决此问题。

这个链接让我明白了一切:https://github.com/nerdvegas/rez/issues/436

【讨论】:

  • 你能解释一下ur'\\?\'应该做什么吗?
【解决方案2】:

我遇到了同样的问题,在前缀 '\\?\' 之后也没有帮助,对我来说这是路径中的错误分隔符,正斜杠和反斜杠的组合可能会导致它。对我来说,当我用反斜杠 (\) 替换正斜杠 (/) 时,它得到了修复。

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多