Windows如何处理不区分大小写的文件名和路径?

Bil*_*eal 7 windows string locale case-insensitive

在Windows上,文件比较是不区分大小写的操作.但是,真正不区分大小写的系统会对区域设置敏感,并且必须处理三种情况,而不是两种情况(至少根据Unicode).出于各种原因,如果可能的话,我想复制Windows在Windows之外执行此操作的方式.

Windows是否使用这种语言环境支持,或者它是否遵循更可预测的模式(例如,有点像C#的OrdinalIgnoreCase设置)?

Mit*_*dir 2

据我所知NTFS支持两种模式:

  1. POSIX 命名空间:
    除 U+0000 (NUL) 和 /(斜杠)之外的任何 UTF-16 代码单元(区分大小写)。

  2. Win32 命名空间:
    任何 UTF-16 代码单元(不区分大小写),除了 U+0000 (NUL) / (斜杠) \ (反斜杠) 和其他一些字符等:*"

在 Win32 模式下,任何使用 Win32-API 的程序都会将文件名的任何字符转换为大写(如果可能)并在内部使用该名称。

  • @BillyONeal 链接的文章不再存在,但它们存档在这里:http://archives.miloush.net/michkap/archive/2005/01/16/353873.html 和 http://archives.miloush .net/michkap/archive/2005/10/17/481600.html (3认同)
  • -1 这个答案。我在内核调试器中有 NT 文件系统驱动程序。很容易观察到,文件名在提供给内核时“没有”转换为大写。 (2认同)
  • 您暗示 Win32 层执行此操作。这意味着 NT 看到的是大写字母。这只是一个错误的说法。 (2认同)