文件名称最大长度为什么是244个字符,而不是255个?
看很多文章提到了以下内容:
- 目录+文件: 260个字符(带结束符‘\0’)
- 目录: 248个字符(带结束符‘\0’)
- 文件: 256个字符(带结束符‘\0’)
但是经过实际测试,比如说在C盘的根目录下,手动创建文件无论是英文字母还是中文字符都只能创建244个字符(注意是字符,不是字节),比较疑惑为什么不是255个。
原来是因为在资源管理器中创建文件的时候还需要为8.3文件名保留12个字符,所以最大文件名称就成了:
260-1(‘/0’)-3("C:\")-12(8.3格式文件名)=244
8.3格式文件名
8.3格式通常指较旧的Windows操作系统或DOS的文件命名格式。
“8”是指文件名或目录名的主体部分小于等于8个字节;
“3”是指文件名的扩展名部分小于等于3个字节;
8.3文件名的有效字符不包括空格等特殊字符;
若不符合以上限制则会以"~"作延长名称如"Program Files"会变成"Progra~1"
若同一文件夹有相似的名称,末端的数值则会自动递增
8.3短文件名格式规范是DOS+FAT12/FAT16时代遗留下的老规矩,
自从Windows95开始(其实据说从Windows for Groups 3.11开始),
Windows就已经能支持长文件名,但是为了向前兼容,特别是文件系统兼容性,
FAT文件系统均强制执行“为长文件名提供8.3兼容格式的短文件名”的特性。
因此你会看到,在FAT16/32文件系统上:
目录"program files"同时还拥有一个8.3规范的"PROGRA~1"短名称;
而文件"元素周期表.exe"也同时拥有一个"元素周~1.exe"的短名称。
[这有一点像类UNIX系统下的hardlink,一个对象拥有两个引用方式。]
如:
vbs中 同一语句使用长名如下:
WshShell.Run """D:\Program Files\Notepad++\notepad++.exe """&name,1, false
使用8.3命名规则如下:
WshShell.Run "D:\Progra~1\Notepad++\notepad++.exe """&name,1, false