bug:file name too long文件名超出系统最大限制

各操作系统支持最长的文件和目录名称长度(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 中做出了说明

bug:file name too long文件名超出系统最大限制_第1张图片

上述文件内容的第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

你可能感兴趣的:(bug,bug,操作系统,文件名长度限制,路径长度限制,知识点)