将Delphi 2007和TMS组件用于Unicode工具和接口(升级到Delphi 2009以获得Unicode支持不是一种选择)。
我将文件名列表存储在字符串列表(TTntStringList)中。它是有序的,不区分大小写的。默认排序例程使用CompareStringW(LOCALE_USER_DEFAULT,NORM_IGNORECASE,...)来比较字符串(和Find相同)。但是,这是一个问题,因为这会将dummyss.txt与dummyß.txt等等(例如),但在NTFS上将这两个文件放在同一个文件夹中是完全合法的,即它们被视为不同的名称。
我的理解是,在Vista和更新版本中,比较文件名的正确方法是使用CompareStringOrdinal。这是对的吗?
在Vista之前的系统上,正确的方法是什么?我相信它应该是CompareStringW(LOCALE_INVARIANT,...),但我不完全确定。
由于
答案 0 :(得分:3)
引自MSDN文章Handling Sorting in Your Applications:
CompareStringOrdinal比较两个 用于测试二进制的Unicode字符串 平等,而不是语言 平等。这样的例子 非语言字符串是NTFS文件 名字,......
CompareStringOrdinal需要Windows Vista或更高版本。
编辑:是的,seems在Vista之前的Windows中,您可以使用CompareStringOrdinal在内部使用的RtlCompareUnicodeString,并且自Windows NT起可用。