为什么 NTFS 不允许在目录名称中使用尾随句点?

war*_*ren 4 windows linux ntfs filesystems

在 Linux 上,我可以有一个名为temp..

如果我尝试mkdir temp.在 Windows 机器上执行 a ,则尾随句点会被截断。

如果我尝试将一个目录从 Linux 同步到具有尾随周期的 Windows,它将失败(由同事在seafile 中找到)。

这是为什么?

use*_*686 8

NTFS 不会禁止它,它只是 Win32 API。正如 Alex 在评论中指出的那样,如果您\\?\...习惯于跳过通常的解析并提供 NT API 的原始路径,那么您可以创建一个带有尾随句点的目录。

(为什么这样做?Win32 文件命名空间一文说:“对于文件 I/O,路径字符串的“\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后的字符串直接发送到文件系统。例如,如果文件系统支持大路径和文件名,则您可以超出 Windows API 强制执行的 MAX_PATH 限制。")

至于为什么去掉尾随句号,官方似乎没有任何说明,但可能与旧的 MS-DOS 或 Windows 3.11 程序的兼容性有关。在 8.3 文件名世界中,空扩展名和根本没有扩展名是一回事——在这两种情况下,文件名将XYZ被存储为XYZ·····,扩展···名将被存储为(代表空字节的点),因此可能有依赖于的程序这个事实。当 Windows 95 获得长文件名支持时,它开始将名称和扩展名存储为单个字符串,从而导致xyzxyz.成为不同的文件名。它可能不得不去除尾随时间以避免破坏此类程序。