天天看點

windows系統下的檔案長名和檔案短名

1、短檔案名的由來

windows下的檔案短名是dos+fat12/fat16時代的産物,又稱為8dot3命名法,類似于PROGRA~1(目錄)或者元素周~1.exe(檔案)這樣的名稱。

8是指檔案名或目錄名的主體部分小于等于8個字元 ;  3是指檔案名或目錄名的擴充部分小于等于3個字元 ;中間以 . 作為分割

 在FAT16檔案系統中,由于FDT中的檔案目錄登記項隻為檔案名保留了8個位元組,為擴充名保留了3個位元組,是以DOS和Windows的使用者為檔案起名字時要受到8.3格式的限制。

2、長檔案名由來

NTFS檔案系統支援unicode(UTF16)字元集檔案名,最長達255個UTF16字元,是以NTFS檔案系統以及基于unicode字元集的32位NT核心Windows作業系統本身都沒有必要遵循16位DOS時代遺留的8.3格式短檔案名規範。

3、相容性問題

從win95開始,采用fat32已經支援長檔案名,但是為了保持相容性,保證低版本的程式能正确讀取長檔案名檔案,每當建立新檔案或新目錄時,系統自動為所有長檔案名檔案建立了一個對應的短檔案名。使這個檔案既可以用長檔案名尋址,也可以用短檔案名尋址。

當建立一個長檔案名時,長名目錄項和對應的别名(短名)目錄項的存儲有以下6個處理原則:

·取長檔案名的前6個字元加上“~1”形成長檔案名的别名(即短檔案名),并将長檔案名中最後一部分(最後一個間隔符“.”後面字元)的前3個字元作為其擴充名。

·如果已存在這個名字的檔案,則符号“~”後的數字會自動增加。

·任何包括小寫字母的檔案名都被看作是長檔案名,而不管其長度是多少。如果有對于DOS和Windows3.x非法的字元,則用下劃線替代。

·長檔案名存儲在屬性标志為OFH的32位元組目錄登記項中(這是與短檔案名目錄項的差別)。用Unicode格式編碼,每個字元(無論是英文或是漢字)均占2位元組。

·每個目錄登記項用26個位元組存儲13個字元(序号由第1位元組指定)。位置多餘時,先用00表示結束,再用FFH填充。

·長檔案名用若幹個長名目錄項儲存,長檔案名目錄項倒序排在檔案短目錄項前面。

采用以上的存儲辦法後,在Windows9x下建立的長檔案名在DOS或Windows3.x下就隻能看見其對應的短檔案名,完全忽略了長檔案名。在Windows9x下運作的應用程式通過作業系統請求檔案名時,Windows9x會根據應用程式的性質分别給予不同的檔案名,16位應用程式得到8.3格式的檔案名,而32位應用程式得到長檔案名。

win9x系統同樣支援長檔案名,同時強制生成一個短檔案名。

在nt32+ntfs下面短檔案名變為可選。

在xp和win7系統下,在指令行中與短檔案名有關的一些指令:

fsutil behavior query disable8dot3    檢查NTFS驅動是否開啟8.3相容特性

fsutil behavior set disable8dot3 1    關閉8.3相容特性

fsutil behavior set disable8dot3 0    開啟8.3相容特性

fsutil file setshortname <longname> <8.3name>  手工指定一個8.3短名稱

dir /x   列出目前目錄的子目錄和檔案,以及相應的8.3相容名稱(如果有的話)

參考文章連結:

http://lcx.cc/?i=2644

http://my.oschina.net/u/566587/blog/298570

http://www.xuebuyuan.com/2208606.html

http://blog.csdn.net/zhangjinqing1234/article/details/7604541