2009年1月21日 この記事のサンプルコードでは、不十分であることが判明しました。
改訂版のコードは、その4(補足) を参照ください。
急転直下の展開です。
既に自作したルーチンでスライドショーXをリリースしたのですが、そこへ友人からメールが…。
API の StrCmpLogicalW を使えば良いのでは?
すぐさま検索すると、出てくるは、出てくるは…。
使い方は簡単で、宣言して比較用のメソッドComparerTo等で使うだけです。
注意点は、引数をUnicodeで渡す必要があるため、宣言時にCharSet.Unicodeを忘れないように指定する必要があります。
以下にstringの代わりに使うサンプルクラスを掲載します。
======================== ここから ======================== using System.Runtime.InteropServices; public class XPString : IComparable{ [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] private static extern int StrCmpLogicalW( string x, string y); private string _str; public XPString(string str) { this._str = str; } public int CompareTo(XPString other) { return StrCmpLogicalW(this._str, other._str); } public override string ToString() { return this._str; } } ======================== ここまで ========================
ソートを行う場合は、このXPStringをデータとするListオブジェクトを作成して、Listへファイル名データを追加後、Sortメソッドを実行すれば、ListオブジェクトのデータがWindowsのファイル名順にソートされます。