所謂8.3格式短文件名規範,就是型如 PROGRA~1(目錄)或者
元素周~1.exe(文件)這樣的名稱——
“8”是指文件名或目錄名的主體部分小於等於8個字節;
“3”是指文件名的擴展名部分小於等於3個字節。
另外還有壹點,就是8.3文件名的有效字符不包括空格等特殊字符。
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,壹個對象擁有兩個引用方式。]
PS:知道為什麽IE瀏覽器的主程序叫做iexplore.exe 而不是iexplorer麽?
就是為了照顧8.3短文件名規範。
===================NTFS文件系統與8.3格式規範的兼容性===================
NTFS文件系統支持unicode(UTF16)字符集文件名,最長達255個UTF16字符,
因此NTFS文件系統以及基於unicode字符集的32位NT內核Windows操作系統
本身都沒有必要遵循16位DOS時代遺留的8.3格式短文件名規範。
但還是為了兼容性,NTFS文件系統也提供了壹個可選的特性:8.3兼容格式。
Windows中這個特性默認是on,也就是說每當建立壹個長文件名的對象的同時,
系統的NTFS驅動模塊會自動建立壹個合適的8.3格式短名稱指向這個對象。
需要指出的是,這個特性並不像FAT文件系統中那樣是強制執行的,
因此不同的磁盤實用程序或者操作系統可能有不同的執行方式——
比如windowsXP中可以用 fsutil behavior set disable8dot3 1 命令關閉,
驅動模塊關閉這壹特性後就不會每次都額外地建立壹個附加的短名稱,
這樣在新建/重命名大量小文件/目錄的時候能略微提升磁盤的寫入速度,
(不用計算出壹個合適的短文件名,也不用把這個額外的信息寫入磁盤)。
=================非win32標準的老程序兼容性依賴8.3規範=================
但是,關閉這壹特性之後可能導致某些古老的應用程序出現兼容性問題,
這些程序雖說是32位GUI界面的“windows應用程序”,卻不完全遵循win32
程序的規範,而是通常混合有16位API,使用8.3格式短名稱來引用文件。
很顯然,如果在壹個NTFS分區上根本就不為長文件名提供短名稱,那麽這些
16/32位混合型老程序將無法用8.3格式短名稱來找到文件,當然會出錯……
但是事情並不總是這麽簡單的——
最近我發現有幾個老的應用程序不能正常啟動,這包括曾經在科大校園網上
非常流行的科技大詞典(主程序 ncce_win.exe,怎麽樣,熟悉不?)
細查原因,似乎只是放在NTFS分區才會出問題,移到FAT32的U盤上沒問題。
後來我驚訝的發現:把U盤格成NTFS再放上這個程序也沒問題!…… ……
數小時後,真正的的原因被找到了,說起來非常復雜,簡而言之:
全路徑上有壹級目錄不兼容短文件名格式,因此主程序找不到相關文件!
為什麽會有壹級目錄不兼容8.3規範呢?
因為我的硬盤是在以前的硬盤出故障後新換的,換上來之前,我在
壹個64位windows操作系統上把舊硬盤上還能讀出的目錄壹壹復制過來,
而那個64位windows關閉了NTFS的8.3兼容特性,復制來的目錄和文件
都不具備附加的短名稱,特別是我放應用程序的E:\program files\目錄。
(64位windows理論上是完全不支持16位和16/32位混合程序的,因此可能
默認就關閉了NTFS驅動的8.3兼容性,或者也許是什麽優化程序關閉的。)
然後我用GHOST恢復了系統分區,恢復的32位winXP並沒有關閉8.3兼容性,
但關鍵問題是已經寫入NTFS分區的(不具備短名稱的)目錄和文件並不會被
這個32位XP重建短文件名,系統只會對新建的文件或目錄附加8.3文件名,
至於原先已經建立好的目錄和文件,即使是重命名這種操作,也無法
“提醒”XP檢查並追加上壹個短文件名——這壹點讓我百思不得其解。
於是,當我把軟件放在E:\program files\的子目錄中時,雖然子目錄
“科技詞典”,以及ncce_win.exe等文件名都符合8.3規範,但是全路徑上
有壹個“program files”是不符合8.3規範的,並且沒有等效的短名稱代替,
所以某個API就無法用“E:\progra~1\科技詞典\xxxxxxxx.xxx”定位文件了,
這個程序當然無法正常啟動。