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


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

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

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

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

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

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

    遇到这种问题真的难受,本来一个小脚本认为不可能出错的,结果又花费了半天时间搞这个。绝望.jpg。

  • 相关阅读:
    try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
    BigDecimal 使用 静态方法总结
    成员内部类里面为什么不能有静态成员和方法?
    浅谈多态机制的意义及实现
    Java接口中的成员变量的意义
    IDEA 打包和导入 Jar 包
    Java static关键字
    Java this关键字
    Java 匿名对象
    Java JOptionPane 对话框
  • 原文地址:https://www.cnblogs.com/hexiaoqi/p/13040220.html
Copyright © 2020-2023  润新知