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

时间:2011-08-26 01:10:01

标签: windows

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

3 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:29)

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

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

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

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

答案 2 :(得分:1)

我在Windows上运行区分大小写的文件系统。 我在每个目录中使用它: https://devblogs.microsoft.com/commandline/per-directory-case-sensitivity-and-wsl/

这会破坏所有不考虑此问题的Windows应用程序,并执行诸如将文件请求转换为所有小写字母之类的事情。

但是我不排除其他人在整个硬盘和网络资源上都区分大小写。

尽管通常只有开发人员会执行此操作,所以这完全取决于您的用例。

如果您要为高级用户编写应用程序,那将是不安全的假设。

我建议每个人在为Windows构建应用程序时都假定文件大小写敏感。因为您只会遇到不区分大小写的麻烦。

相关问题