3

UnicodeユーティリティおよびインターフェイスにDelphi2007およびTMSコンポーネントを使用する(UnicodeサポートのためにDelphi 2009にアップグレードすることはオプションではありません)。

ファイル名のリストを文字列リスト(TTntStringList)に保存しています。ソートされ、大文字と小文字は区別されません。デフォルトのソートルーチンは、CompareStringW(LOCALE_USER_DEFAULT、NORM_IGNORECASE、...)を使用して文字列を比較します(検索でも同じです)。ただし、これは、dummyss.txtとdummyß.txt(たとえば)を同一視するため問題ですが、NTFSでは、これら2つのファイルを同じフォルダに置くことは完全に合法です。つまり、これらは異なる名前として扱われます。

私の理解では、Vista以降では、ファイル名を比較する正しい方法はCompareStringOrdinalを使用することです。これは正しいです?

ビスタ以前のシステムでは、正しい方法は何でしょうか?CompareStringW(LOCALE_INVARIANT、...)である必要があると思いますが、完全にはわかりません。

ありがとう

4

1 に答える 1

3

MSDNの記事「アプリケーションでの並べ替えの処理」からの引用:

CompareStringOrdinal は、2つのUnicode文字列を比較して、言語の同等性ではなく、バイナリの同等性をテストします。このような非言語文字列の例としては、NTFSファイル名などがあります。

CompareStringOrdinalには、WindowsVista以降が必要です。

編集:はい、Vista以前のWindowsでは、CompareStringOrdinalによって内部的に使用され、WindowsNT以降で使用可能なRtlCompareUnicodeStringを使用できるようです。

于 2010-02-17T11:25:22.923 に答える