3

为 Unicode 实用程序和界面使用 Delphi 2007 和 TMS 组件(升级到 Delphi 2009 以支持 Unicode 不是一种选择)。

我将文件名列表存储在字符串列表(TTntStringList)中。它已排序且不区分大小写。默认排序例程使用 CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE, ...) 来比较字符串(查找也是如此)。但是,这是一个问题,因为这会将 dummyss.txt 等同于 dummyß.txt(例如),但在 NTFS 上,将这两个文件放在同一个文件夹中是完全合法的,即它们被视为不同的名称。

我的理解是,在 Vista 和更新版本上,比较文件名的正确方法是使用 CompareStringOrdinal。这个对吗?

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

谢谢

4

1 回答 1

3

引用 MSDN 文章在您的应用程序中处理排序

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

CompareStringOrdinal 需要 Windows Vista 或更高版本。

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

于 2010-02-17T11:25:22.923 回答