File name too long window和linux排查,解决

首先,先说一下遇到问题的背景;我们公司需要上报一些文件,不限制格式;而且对于大于50M的文件pdf,压缩包等必须拆分和重命名;从开发到测试和目前的运行一直没有问题;最近在正常下载和上报时发现了个别文件没有下载下来;通过排查日志发现报下面的错;

 原来是文件名太长了,通过查询资料了解到原来操作系统对这些都做了限制;而且每个版本可能都会存在不同的限制;

在 Windows API ((以下段落) 中介绍的一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。 本地路径按以下顺序构建:驱动器号、冒号、反斜杠、用反斜杠分隔的名称组件以及终止 null 字符。 例如,驱动器 D 上的最大路径为“D:\some 256 个字符的路径字符串<NUL>”,其中“<NUL>”表示当前系统代码页的不可见终止 null 字符。 (此处使用的字符 <> 是为了直观明了,不能是有效路径 string 的一部分。)

例如,如果将具有长文件名的 git 存储库克隆到本身具有长名称的文件夹,则可能会达到此限制。

详细资料大家可以查阅:https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

操作系统文件名最大长度(字节)路径最大长度
Linux 255 4096
MAC 255 1024
Windows(未开启长文件名) 255 260
Windows(开启长文件名) 255 32767

 

上面的图例大家可以参考,具体可能还需要根据自身装的系统进行详细的查询。

详细说明:

1、linux

Linux的 /usr/include/linux/limits.h 中做出了说明

#ifndef _LINUX_LIMITS_H
#define _LINUX_LIMITS_H
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
#endif

 

这些限制在Linux系统下可以通过修改系统内核修改这个限制。

Linux文件名和目录的长度限制是255个字符(字节,linux中所说的字符是以ascii码来编码的)

 

2 windows

Windows 通常限定文件名最多包含 260 个字符(一个汉字占用两个字符哦)。但实际的文件名必须少于这一数值,因为完整路径(如 C:\Program Files\filename.txt)都包含在此字符数值中。
windows下完全限定文件名必须少于260个字符,目录名必须小于248个字符。(包含目录文件夹)
win7x64位环境:
260个长度是作为总的文件名长度限制。
如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。

                        

3 mac

文件名最长255字节(包含扩展名),路径最长:1024

既然来了,那就认识下,扫描关注下日后多交流!

 

posted @ 2024-03-04 12:26  逝年的我们  阅读(164)  评论(0编辑  收藏  举报