我创建了一个超出字符数限制的目录,在该目录之前添加了“\\?\”,但无法使用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

10-08 20:05