当前位置:  开发笔记 > 运维 > 正文

Windows如何确定/处理任何给定文件的DOS短名称?

如何解决《Windows如何确定/处理任何给定文件的DOS短名称?》经验,为你挑选了2个好方法。

我有一个包含这些文件的文件夹:

alongfilename1.txt <--- created first
alongfilename3.txt <--- created second

当我在命令提示符下运行DIR/x时,我看到分配了这些短名称:

ALONGF~1.TXT alongfilename1.txt
ALONGF~2.TXT alongfilename3.txt

现在,如果我添加另一个文件:

alongfilename1.txt 
alongfilename2.txt <--- created third
alongfilename3.txt

我看到了这个:

ALONGF~1.TXT alongfilename1.txt
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt

精细.它似乎是根据我创建文件的日期/时间分配"〜#".它是否正确?

现在,如果我删除"alongfilename1.txt",其他两个文件将保留其短名称.

ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt

何时释放该ID(在本例中为~1)以用于另一个短名称.它会永远吗?

另外,我的机器上的文件是否有可能是X的短名称,而同一文件在另一台机器上有一个短名称Y?我特别关注其自定义操作使用DOS短名称的安装.

多谢你们.



1> Mihai Limbăș..:

如果我是你,我永远不会依赖任何版本的任何文件系统驱动程序(无论是微软的,不管是另一个操作系统)来保持它用于生成短文件名的算法的一致性.Microsoft Fastfat和NTFS驱动程序的确切行为不是"正式"记录的(除了有些高级别的概述)因此不属于API合同的一部分.如果您更新驱动程序,今天可行的功能可能无法使用.

此外,绝对不要求短名称包含波形符号 - 例如,请参阅Raymond Chen的这篇文章.

在MSDN博客中有关于此主题的宝藏信息 - 例如:

注册表项以强制Windows使用短文件名

NTFS好奇心(第一部分):短文件名

此外,不要仅依赖于字母数字字符.查看Linux VFAT驱动程序,例如,大写字母,数字和以下字符的任何组合都是有效的:$%'` - @ {}〜!#()&_ ^.NTFS将以兼容模式运行......



2> Piskvor cc-b..:

使用该文件创建短文件名.该算法的工作原理如下(通常,但请参阅moocha的回复):

counter = 1
stripped_filename = strip_dots(strip_non_ascii_characters(filename))
shortfn = first_6_characters(stripped_filename)
while (file_exists(shortfn + "~" + counter + "." + extension)) {
    increment counter by 1
    if more digits are added to counter, shorten shortfn by 1 
    /* e.g. if counter comes to 9 and shortf~9.txt is taken. try short~10.txt next */
}

这意味着一旦创建了文件,它将保留其短名称,直到它被删除.

删除文件后,可以再次使用短名称.

如果您将文件移动到其他位置,它可能会获得一个新的短名称(例如,您将c:\ somefilewithlongname.txt("c:\ somefi~1.txt")移动到d:\ stuff\somefilewithlongname.txt,如果有d:\ stuff\somefileelse.txt("d:\ stuff\somefi~1.txt"),移动文件的短名称将是somefi~2.txt).似乎短名称仅在给定计算机上的给定目录中持久存在.

所以:短文件名将由文件系统生成,通常通过上面概述的方法生成.最好假设短文件名不是持久的,因为一台机器上的c:\ longfi~1.txt可能是"c:\ longfilename.txt",而另一台机器上的c:\ longfi~1.txt可能是"c:\ longfish_story.txt"; 此外,删除文件时,短名称将立即再次可用.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有