不是所有的短文件名都包含有波浪符号短文件名:特仑苏.txt = 特~1.txt你可能不知道的是总结最后

原标题:不是所有的短文件名都包含有波浪符号
短文件名:特仑苏.txt=特~1.txt想起了一句话:不是所有的牛奶都叫特仑苏 。
我想 , 大多数人都看到过Windows系统为长文件名自动生成的对应的短文件名 。

不是所有的短文件名都包含有波浪符号短文件名:特仑苏.txt = 特~1.txt你可能不知道的是总结最后
文章图片
举个例子 , 如果有一个文件名为”Longnameforfile.txt” , 则你可能会得到类似这样的短文件名”LONGNA~1.TXT” , 如果系统发现这个短文件名存在很多重复的 , 则还会生成这样的名称:”LO18C9~1.TXT” 。
从这个例子中 , 我们看到这些短文件名都有一个共同之处:它们都包含有波浪符号(~) 。
你可能不知道的是不是每个短文件名都包含有波浪符号 。
每个文件系统都有自己的一套方法来实现短文件命名 。 Windows95独占式的使用”~n”实现短文件名 。
算法类似于下图:

不是所有的短文件名都包含有波浪符号短文件名:特仑苏.txt = 特~1.txt你可能不知道的是总结最后
文章图片
WindowsNT则引入了一种名为”hexadecimalhashoverflow”的技术来实现短文件名的生成 。 然而 , 有些系统 , 比如Novell , 则采用简单的字符串截断的方式实现 。 例如 , 如果Novell系统中有一个长文件名”Longnameforfile.txt” , 则Novell会将它截断为”LONGNAME.TXT” 。
所以 , 请不要假设所有的短文件都会带有波浪符号 , 因为这并不是事实 。
这也意味着 , 如果你发现一个文件名里没有包含波浪符号 , 你就想着可以跳过对GetLongFileName的调用 , 这可不行:因为你的这一优化在Novell网络上是无效的 , 是会掉坑里去的 。
总结俱往矣 , 短文件名 , 终将还是会消失在历史的长河中 , 和我们一样 , 都会变成层土 。
想想 , 其实也挺平常的 。
最后RaymondChen的《TheOldNewThing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Notallshortfilenamescontainatilde》
不是所有的短文件名都包含有波浪符号短文件名:特仑苏.txt = 特~1.txt你可能不知道的是总结最后
不是所有的短文件名都包含有波浪符号短文件名:特仑苏.txt = 特~1.txt你可能不知道的是总结最后
文章图片