复制起来非常简单。
创建一个文件夹,其中包含文件“ABC123~1.txt”
创建一个文件夹,其中包含文件“ABC 123.txt”
尝试将文件从第一个文件夹复制到第二个文件夹...Windows 询问您是否要覆盖?
我尝试过其他文件名组合但似乎无法正常工作,例如 ABCD 不起作用。
这究竟为什么会发生?
我知道波浪号是路径的缩写,但我没看到“ABC123...”是“ABC 123”的缩写?
答案1
由于 Windows NT 的短文件名特性,操作系统会自动从文件名中去掉波浪符号,只留下空格。
这意味着
ABC~123.txt
变成
ABC 123.txt
当 Windows 将文件写入目的地时。
然后你去复制一个名为‘ABC 123.txt’它会抱怨,因为那里已经有一个同名的文件。
为了使其被识别为短文件名,波浪号必须是从名称末尾开始的连续多个字符。
因此,如果你有 2 个文件名,并且可能存在文件名冲突,则你的 2 个文件必须被称为
ABC123~1.txt
和
ABC123~2.txt
任何其他破坏序列的内容,Windows 都会将其解释为正常的长文件名并尝试删除波浪符号。
正是由于这个原因,当 Windows 95 首次引入长文件名时,很多软件出现故障,或者正在写入的文件损坏。
这仅仅是因为应用程序使用从目录调用中获得的内容(波浪号和所有内容),而不尊重 NTFS 所跟踪的序列。
更新 25/6/14
看来我没有把事情的顺序说得太清楚,所以我会尝试稍微扩展一下。
当 Windows 用短文件名命名长文件时,有两种因素在起作用,首先,短文件名限制为文件名 8 个字符,扩展名 3 个字符,其次,长文件名中允许的许多字符在短文件名中是不允许的。
把第 2 点放在一边,集中讨论第 1 点,这通常意味着,如果文件名称相似,则少于 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 将创建一个名为的短文件:
ABC123~5.txt
再次因为它尊重文件序列。
但是,如果您返回到手动创建 ~4 的步骤并创建 ~5、~6 或任何不按顺序排列的内容,Windows 应该会删除波浪号,因为它现在看到您保存的文件与其他文件不按顺序排列,因此它将其解释为不是短格式名称,而是长格式名称,然后它必须自动为其生成相应的短文件名。
合理?
关于 Windows(或更具体地说是 NTFS)何时决定更改什么以及更改什么,存在许多复杂的规则,并且通常,就在您认为自己已经掌握了它的时候,它却做出了一些非常出乎意料的事情。
早在 90 年代中期,它就曾给我(以及很多像我一样的人)带来很大的麻烦,尤其是在诸如 netbios 和 novell netware 等网络系统上,我很高兴现在这一切都过去了,我们 99% 的时间都可以使用长名称 :-)