先说下结论,winrar GUI方式中是可以解压包内全路径+文件名长度超过260字符的文件,但是命令行方式就不支持,其中命令行方式包含winrar默认安装目录中的winrar.exe和rar.exe还有unrar.exe,以及rarlab网站上放的freeware的unrar.exe,这样其实就已经卡断了很多应用/模块/库通过操作系统调用winrar命令行执行解压长名文件的途径。
原因是这些命令行程序在解压过程中会先创建目录和文件,当目标目录或文件其全路径长度超过260的话,会报创建失败code 9,虽然不会中断解压,但是这个文件或目录是跳过去了。在调用rar命令行解压的场景下,能做的也就是采用将当前工作目录设置到解压目标目录,这样解压目标文件可以以相对路径的方式创建,但是包内路径已经超过260的话,就无可奈何了,得考虑调用winrar.exe GUI的方式解压,不过winrar没有开放API,所以也挺难搞的。
当然也有不依赖rar命令行方式的库,比如npm的node-unrar-js库,虽然它使用的 C++ unrar library ,但是是可以处理这种路径名超过260的情况。
在需要处理自动解压的场景,我一般会要求压缩包采用zip格式,这个本身是开放标准,大家都支持,而且没有这个文件路径最长260的变态限制。
另外再说一下,windows在win10或server2016以后的本地文件系统是可以支持长路径的,可以通过组策略管理工具/本地计算机策略/计算机配置/管理模板/系统/文件系统/ 查看或修改 启用win32长路径的情况。
关于windows下winrar命令行解压长路径文件的尝试
于 2024-12-26 13:42:10 首次发布

4314

被折叠的 条评论
为什么被折叠?



