比较和排序Unicode文件名

时间:2010-02-17 10:19:16

标签: windows delphi filenames tstringlist

将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,...),但我不完全确定。

由于

1 个答案:

答案 0 :(得分:3)

引自MSDN文章Handling Sorting in Your Applications

  

CompareStringOrdinal比较两个   用于测试二进制的Unicode字符串   平等,而不是语言   平等。这样的例子   非语言字符串是NTFS文件   名字,......

CompareStringOrdinal需要Windows Vista或更高版本。

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