在 Windows 中,为什么有些字符是非法的?

Mik*_*ler 1 windows filesystems operating-system file dos

正如我们大多数人所知,Windows 禁止在文件名中使用以下字符:

* . " / \ [ ] : ; | = ,

Linux 和其他基于 Unix 的系统仅出于显而易见的原因禁止\0(空字符)和/(路径分隔符)。

为什么 Windows 有这么多禁止字符?

我看过了,我发现的每个答案都是“这是有效的”或“什么是有效的”的一些变体,没有讨论导致 Windows (DOS?) 团队将它们定为非法的设计决策。

Har*_*ton 5

要按顺序排列它们:

  • *被禁止,因为它是一个 Win32 通配符。请注意,与 Linux 不同的是,通配符由 API 处理,而不是由 shell 处理。

  • .不被禁止(显然!)尽管它出现在文件名的末尾时确实具有特殊的语义,即它被删除。这是为了与 FAT 文件系统和/或为它们设计的应用程序向后兼容。

  • "内核通配符

  • 反斜杠是路径分隔符,为了与 UNIX 兼容,正斜杠也被视为路径分隔符(有时)。

  • [并且]不被禁止。

  • : 用于指示备用数据流

  • ; 不被禁止。

  • |- 我不确定这个。可能是因为命令行上的特殊含义,尽管文件名中还有其他具有特殊含义的字符没有被禁止。

  • =并且,不被禁止。

不在您列表中的其他禁止字符:

  • ? 是一个 Win32 通配符。

  • <,>是内核通配符。

  • 以句点相同的方式从文件名的末尾修剪空格。