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

10
在Windows系统中,文件比较是不区分大小写的操作。但是,一个真正不区分大小写的系统会对区域设置敏感,并且需要处理三种情况,而不是两种(至少根据Unicode)。出于各种原因,如果可能的话,我想在Windows之外复制Windows的这种方式。
Windows是否使用此类区域设置支持,还是遵循更可预测的模式(例如类似于C#的OrdinalIgnoreCase设置)?

将地区设置应用于文件名比较将是一场灾难,因为在一个地区中命名不同的文件可能看起来像在另一个地区是相同的文件。显然,文件名映射必须是不可变的,相对于FS。。。而且它就是:每个NTFS文件系统都包含一个表 - $UpCase,MFT条目#10 - 将字符映射为大写字母。当格式化文件系统时创建此文件,并且永远不会更改。 - Jim Balter
1个回答

2
据我所知,NTFS支持两种模式:
  1. POSIX命名空间:
    任何UTF-16代码单元(区分大小写),除了U+0000(NUL)和/(斜杠)。

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

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

1
我不得不深入挖掘我的书签......http://blogs.msdn.com/b/michkap/archive/2005/01/16/353873.aspx - Mithrandir
1
也发现了这个:http://blogs.msdn.com/b/michkap/archive/2005/10/17/481600.aspx - Billy ONeal
2
我曾在内核调试器中使用NT文件系统驱动程序。很容易观察到,当文件名传递给内核时,并没有将其转换为大写字母。 - asveikau
2
你暗示 Win32 层会做这个。这意味着 NT 看到的是大写字母。这只是错误的陈述。 - asveikau
3
@BillyONeal链接的文章已经不存在了,但它们被存档在这里:http://archives.miloush.net/michkap/archive/2005/01/16/353873.html 和 http://archives.miloush.net/michkap/archive/2005/10/17/481600.html - Tereza Tomcova
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接