天天看點

不是所有的短檔案名都包含有波浪符号

短檔案名:特侖蘇.txt = 特~1.txt

想起了一句話:不是所有的牛奶都叫特侖蘇。

我想,大多數人都看到過Windows系統為長檔案名自動生成的對應的短檔案名。

不是所有的短檔案名都包含有波浪符号

舉個例子,如果有一個檔案名為”Long name for file.txt”,則你可能會得到類似這樣的短檔案名”LONGNA~1.TXT”,如果系統發現這個短檔案名存在很多重複的,則還會生成這樣的名稱:”LO18C9~1.TXT”。

從這個例子中,我們看到這些短檔案名都有一個共同之處:它們都包含有波浪符号(~)。

你可能不知道的是

不是每個短檔案名都包含有波浪符号。

每個檔案系統都有自己的一套方法來實作短檔案命名。Windows95獨占式的使用”~n”實作短檔案名。

算法類似于下圖:

不是所有的短檔案名都包含有波浪符号

WindowsNT則引入了一種名為”hexadecimal hash overflow”的技術來實作短檔案名的生成。然而,有些系統,比如Novell,則采用簡單的字元串截斷的方式實作。例如,如果Novell系統中有一個長檔案名”Long name for file.txt”,則Novell會将它截斷為”LONGNAME.TXT”。

是以,請不要假設所有的短檔案都會帶有波浪符号,因為這并不是事實。

這也意味着,如果你發現一個檔案名裡沒有包含波浪符号,你就想着可以跳過對GetLongFileName的調用,這可不行:因為你的這一優化在Novell網絡上是無效的,是會掉坑裡去的。

總結

最後