比较和分类Unicode文件名

使用delphi2007年和TMS组件的Unicode使用和接口(升级到delphi2009年的Unicode支持不是一个选项)。

我将一个文件名列表存储在一个string列表(TTntStringList)中。 它是sorting的,不区分大小写。 默认的sorting例程使用CompareStringW(LOCALE_USER_DEFAULT,NORM_IGNORECASE,…)来比较string(和查找相同)。 然而,这是一个问题,因为这会将dummyss.txt与dummyß.txt等同起来(例如),但是在NTFS上,将这两个文件放在同一个文件夹中是完全合法的,即将它们视为不同的名称。

我的理解是,在Vista和更新,比较文件名的正确方法是使用CompareStringOrdinal。 它是否正确?

在Vista系统之前,正确的方法是什么? 我相信它应该是CompareStringW(LOCALE_INVARIANT,…),但我不完全确定。

谢谢

从MSDN文章引用处理应用程序中的排序 :

CompareStringOrdinal比较两个Unicode字符串以测试二进制相等性,而不是语言相等。 这种非语言字符串的例子是NTFS文件名,…

CompareStringOrdinal需要Windows Vista或更高版本。

编辑:是的, 似乎在Vista之前的Windows中,您可以使用由CompareStringOrdinal内部使用的RtlCompareUnicodeString ,并且自Windows NT以来可用。