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

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

在 Linux 上,我可以有一个名为的文件夹temp.

如果我尝试mkdir temp.在 Windows 机器上执行此操作,则结尾的句点会被截断。

如果我尝试将 Linux 中的目录同步到 Windows,并且该目录末尾带有句点,则会失败(在海文件由同事提供)。

这是为什么?

答案1

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.成为不同的文件名。它可能不得不删除尾随句点以避免破坏此类程序。

相关内容