各操作系统支持最长的文件和目录名称长度(Linux、Win、Mac)
今天开发需求的时候发现无法新建文件,提示file name too lang,于是翻阅和查询了一些资料,发现不同操作系统下文件名和目录名最长的长度不同。
操作系统 | 文件名最大长度(字节) | 路径最大长度 |
---|---|---|
Linux | 255 | 4096 |
MAC | 255 | 1024 |
Windows(未开启长文件名) | 255 | 260 |
Windows(开启长文件名) | 255 | 32767 |
注意:
文件名包含扩展名
- 如果我们在linux或者mac上创建带有特殊字符的目录时,直接使用单引号引起来即可,如:‘啊1Aa~!@#$%^&()_+{}’
文件名和目录名在操作系统中都有最大长度的限制,而且不同系统中的最大长度不同。
1 linux
Linux的 /usr/include/linux/limits.h 中做出了说明
上述文件内容的第11行和第12行分别说明了文件名和相对路径名的最大长度。需要说明的是,字符指的是ASCII字符,如果是汉字或者其他语言,则需要视编码而定。
这些限制在Linux系统下可以通过修改系统内核修改这个限制。
Linux文件名和目录的长度限制是255个字符(字节,linux中所说的字符是以ascii码来编码的)
例如:255个英文字母,包含中文则不足255个
2 windows
Windows 通常限定文件名最多包含 260 个字符(一个汉字占用两个字符哦)。但实际的文件名必须少于这一数值,因为完整路径(如 C:\Program Files\filename.txt)都包含在此字符数值中。
windows下完全限定文件名必须少于260个字符,目录名必须小于248个字符。
- win7x64位环境:
260个长度是作为总的文件名长度限制。
例如:所在文件夹的长度为50
则文件名的长度被限制在210之下,超出的话会被进行截断。
如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。
例子:
我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的却是文件名是256个长度(.txt也会算长度)
1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklm.txt
实际生成文件名:
xxxxx省略
共计256个长度,加上”C:\”三个长度,共计259个长度,再加一个字符串结束符’\0’,正好260位长度
注意:
如果文件名过长,可以通过开启windows的长文件名开关
3 mac
文件名最长255字节(包含扩展名),路径最长:1024
参考文章:
https://blog.csdn.net/beyondlpf/article/details/7873045
https://blog.csdn.net/jimmyleeee/article/details/124682486