8.3文件名是指在任意目录说明符之后最多8个字符,最多3个字符的扩展名,两者通过“.”连接起来,这也是8.3命名规则名称的由来。对于只支持8.3文件名的系统,忽略多余的字符,如果文件名没有扩展名则最后的“.”没有意义,即“fname”和“fname.”等效。在这些系统中文件和目录名都是大写的,虽然8.3标准不区分大小写。然而在非8.3操作系统访问8.3文件系统,底层系统可能在内部更改文件名以保留大小写并且避免在名字中截断字母。
为了保持与遗留应用程序(在DOS和Windows 3.1上)的向后兼容性,在FAT和VFAT文件系统上,会为每个LFN自动生成8.3文件名,通过这个文件名,仍然可以重命名、删除或打开文件,尽管生成的文件名可能与原始文件名没有什么相似之处。在NTFS文件系统上,可以关闭8.3文件名的生成。可以使用Kernel32.dll函数GetShortPathName获得8.3文件名。
没有从长文件名创建8.3文件名的强制算法,但Windows系统上使用如下约定:
1.如果文件名8个字符长(一个汉字2个字符),则不会创建8.3文件名。如:“新建文档.txt”、“新建文本.txt”、“新建文12.txt”、“Myfile01.txt”、“Myfile02.txT”、“MYFILE03.TXT”。如果文件名包含特殊字符,如“+”、“.”等,即使长度不超过8个字符也会创建8.3文件名,如:“.file.txt”、“a+b.txt”
2.如果文件名包含大小写,在创建8.3文件名时会转为全大写形式。如“myfilenametest.txt”。
3.如果文件名中含有8.3文件名不支持的字符,会删除无效字符例如空格、点号“.”等。“+”会转换为“_”。如果名字以“.”开头也会删除“.”。处理后的文件名截取前6个字符(一个汉字2个字符,如果第6字符为汉字则会舍去只保留前5个)做基本名,后面跟着“~”,然后跟着一位数字,然后跟着“.”,最后跟着扩展名的前三位。如“abc ds.txt”、“abcds文件.txt”。
4.对于所有NT版本包括windows2000以后,如果具有相同扩展名且简写名称的前6个字符相同的文件或目录超过4个,会将前2个字符作为基本名,然后跟着来源于文件名未公开的哈希的4个十六进制数字,后面跟着“~”,然后跟着一位数字,然后跟着“.”,最后跟着扩展名的前三位。如“myfilenametest4.txt”会变成“MY526B~1.TXT”。
5.对于Windows 95, 98和ME,,如果具有相同扩展名且简写名称的前6个字符相同的文件或目录超过9个,名称会被截断为5个字符,后面跟着“~”,然后跟着两位数字(从10开始),然后跟着“.”,最后跟着扩展名的前三位。如“myfilenametest10.txt”会变成“MYFIL~10.TXT”。
NTFS是Windows NT家族使用的文件系统,它本身支持长文件名,但是8.3个文件名仍然可以用于遗留应用程序。在同一文件夹中存在大量类似命名的文件的情况下,可以选择性地禁用此功能以提高性能。
8.3文件名接受的特殊字符有:“!”、“#”、“$”、“%”、“&”、“'”、“(”、“)”、“-”、“@”、“^”、“_”、“`”、“{”、“}”、“~”。8.3不接受的特殊字符“+”、“,”、“;”、“=”、“[”、“]”,8.3文件名不支持的字符会在生成时转为“_”。