我创建了一个超出字符数限制的目录,在该目录之前添加了“\\?\”,但无法使用shutil.rmtree
删除它,也无法使用os.walk
列出它。
我收到shutil.rmtree("folder")
的以下错误:
有可以用来删除该目录的功能吗?
谢谢。
最佳答案
正如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()
来解决此问题。这个链接对我来说很清楚:https://github.com/nerdvegas/rez/issues/436