跳至正文

Python解决超长文件路径的文件的复制、删除

今天又遇到一个问题,在写一个简单的文件备份的脚本中,使用shutil.copyfile的时候出现了No such file or dir的错误。我排查了一遍之后,发现是文件路径太长了导致Windows下不能查询到文件,也就无从谈起了复制,移动,删除等文件操作了。

经过一番查找之后,发现了两个解决方法:

1、缩减文件路径的长度,在python的pywin32模块中有win32api的GetShortPathName这个函数,这个函数可以把你的非常长的路径给改变,路径长度自然变小了。然而路径名称也被改变了,实际应用的意义不大(因为有些文件夹的名称虽然很长,但它都有自己代表的意义,不能轻易的更改)。(这个函数这里提出来只是为了对于那些批量处理的文件来说的,如果是少量的文件还不如自己手动更改路径)

2、这个解决方法是想办法告诉电脑我的路径长度很长。首先我查询了windows下文件路径的最大长度是多少,查到的结果是260.这对于绝大多数情况都足够用了,但是文件路径长的问题还是存在的。然后就看到了UNC的定义,原来windows下的文件路径的长度最大可以是3万多的长度,具体多少记不清了哈哈哈。只要在绝对路径的前面加上“\\?\”就能告诉计算机我需要使用最大的路径长度,这样就不会出现路径太长而导致的无法操作的问题了。

对于第二种解决方案,还存在一个问题,对于共享计算机目录下该怎么操作呢,因为我们知道,在共享目录下你访问其他电脑的文件的方式都是\+计算机名+路径(例如\\hexiaoqi\test),对于这样的目录你如果前面直接加\?\是会报错的。因为无法正确解析路径。那么对于这种情况应该怎么操作呢?在共享路径前面加上\\?\UNC\这样就ok了,注意这样拼接的时候需要对把共享计算机的前面的\去掉。此处举一个例子(\\?\UNC\hexiaoqi\test)。

Python解决超长文件路径的文件的复制、删除 – 超级宇宙无敌乖宝宝 – 博客园 (cnblogs.com)