Windows环境中的文件路径不区分大小写?

问题描述 投票:32回答:2

假设Windows本地和网络文件路径不区分大小写是否安全?

windows
2个回答
30
投票

是。 Windows(本地)文件系统(包括NTFS)以及FAT和变体不区分大小写(通常)。网络文件系统的底层实现可能区分大小写,但是,大多数允许Windows访问它的软件(例如SMB)将自动使区分大小写的文件系统显示为对Windows不区分大小写。

有关详细信息,我会阅读Wikipedia article on filenames中的部分。


29
投票

Windows上的区分大小写实际上是在应用程序打开文件的方式中实现的。 NTFS可以是区分大小写的文件系统,并且可以愉快地存储文件,相同的名称仅在同一目录中的大小写不同。

在Windows上,所有文件最终都是通过CreateFile API打开的 - 如果将FILE_FLAG_POSIX_SEMANTICS标志传递给调用(并且正在访问的文件系统本身区分大小写),则将根据确切的名称匹配打开文件。如果未传递FILE_FLAG_POSIX_SEMANTICS,则文件系统会打开不区分大小写的文件,并打开其中一个具有匹配名称的文件。如果存在多个,则不确定实际打开哪一个。

Windows上的大多数C和C ++运行时实现都不提供对此机制的任何访问,并且从不使用此标志,因此访问区分大小写的行为的唯一方法是直接使用Windows API。

tl; dr - 您的语言运行时可能会将您的文件系统公开为不区分大小写或保留大小写。如果直接使用Windows API,您可以完全访问受支持的文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.