使用波浪号复制文件具有奇怪的行为

复制非常简单。

创build一个文件夹“ABC123〜1.txt”

创build一个文件夹“ABC 123.txt”

尝试将文件从第一个文件夹复制到第二个…窗户询问是否要覆盖?

我尝试过其他文件名的组合,似乎无法使其工作,如ABCD将无法正常工作。

为什么地球上会发生这种情况?

据我所知,代字号是短path的版本,但我没有看到“ABC123 …”是“ABC 123”的缩写吗?

由于windows NT的文件名称较短,操作系统会自动从文件名中去除波形字符,只留下一个空格。

这意味着什么

ABC~123.txt 

 ABC 123.txt 

当Windows将文件写入目标时。

当你然后去复制一个名为“ABC 123.txt”的实际文件时,它会抱怨,因为那里已经有一个文件名。

为了将其识别为短文件名,代字符必须是名称末尾的连续字符数。

所以如果你有两个文件名和一个可能的文件名冲突,你的两个文件必须被调用

 ABC123~1.txt 

 ABC123~2.txt 

任何破坏序列的东西,窗口将解释为一个正常的长文件名,并尝试删除波浪号字符。

正是由于这个原因,当在Windows 95中首次引入长文件名时,那么多软件被破坏,或者在写入的地方损坏了文件。

简而言之,应用程序使用从目录调用返回的所有内容,而不是尊重NTFS正在跟踪的序列。

更新25/6/14

看起来我并没有把事情的顺序做得太清楚,所以我会试着扩展一下。

当Windows用短文件名命名长文件时,有2个力量在起作用,首先是短文件名限于8个字符的文件名和3个扩展名,其次长文件名允许的字符数很多不允许简而言之。

把点2放在一边,集中在点1上,这通常意味着用less于10个相似命名的文件(它会变得更复杂10或更多),通常你只能得到6个字符来命名你的文件,剩下的2个顺序编号所需的。

Windows将从〜1开始计数到9,通常将它连接到文件名的前6个合法字符,所以如果你保存了3个文件,结果会得到3个名字:

 ABC123~1.txt ABC123~2.txt ABC123~3.txt 

下面的长文件名,很容易生成这些,但其他人(但我试图保持简单的例子):

 ABC 123456.txt ABC123999.txt ABC 123.txt 

现在,如果你在那里,也手动保存一个叫做的文件

 ABC123~4.txt 

Windows不会删除波浪号,为什么?

只是因为它认识到4后来3,所以它把它看作有4个缩短的文件名,并按期望顺序。

如果你随后用另一个文件写入EG:

 ABC 123888.txt 

Windows将创build一个名为:

 ABC123~5.txt 

再一次因为它尊重文件序列。

但是,如果您手动创build〜4,而不是创build〜5,〜6或任何不按顺序的任何操作,则窗口应删除波形符号,因为它现在会看到您保存的文件不与rest,所以它不是一个简短的表格名称,而是一个长的表格名称,然后它必须自动生成一个相应的短文件名称。

合理?

关于什么时候Windows(或者更具体地说是NTFS)决定什么时候以及要改变什么,有很多复杂的规则,而且经常,当你认为自己已经拥有了它时,它会执行一些非常意想不到的事情。

早在90年代中期,它曾经让我自己(和很多像我一样的人)感到头疼,特别是在netbios和novell netware这样的networking系统中,我很高兴现在已经落后了,我们可以使用长名称的99%时间 :-)