[DllImport("shlwapi.dll", CharSet=CharSet.Unicode, ExactSpelling=true)]
static extern int StrCmpLogicalW(String x, String y);
Declare Unicode Function StrCmpLogicalW Lib "shlwapi.dll" (ByVal s1 As String, ByVal s2 As String) As Int32
None.
Do you know one? Please contribute it!
Comparison is case insensitive, numbers are treated by numerical value instead of ASCII code, for example:
File1
fIle2
fiLe10
instead of
File1
fiLe10
fIle2
Please add some!
public class StringLogicalComparer: IComparer
{
[DllImport("shlwapi.dll", CharSet=CharSet.Unicode, ExactSpelling=true)]
public static extern int StrCmpLogicalW(string x, string y);
public int Compare(object x, object y)
{
return StrCmpLogicalW((string)x, (string)y);
}
}
Private Class StringLogicalComparer
Implements IComparer(Of String)
Private Declare Unicode Function StrCmpLogicalW Lib "shlwapi" _
(ByVal s1 As String, ByVal s2 As String) As Integer
Public Function Compare(ByVal x As String, ByVal y As String) _
As Integer _
Implements System.Collections.Generic.IComparer(Of String).Compare
Return StrCmpLogicalW(x, y)
End Function
End Class
Private Sub Test()
Dim cp As New StringLogicalComparer
Debug.WriteLine(cp.Compare("a", "a")) ' 0
Debug.WriteLine(cp.Compare("1", "1")) ' 0
Debug.WriteLine(cp.Compare("a1", "a2")) ' -1
Debug.WriteLine(cp.Compare("a10", "a2")) ' +1
End Sub