-1

我使用这个功能:

files = Directory.GetFiles(tbDirectory.Text).ToArray();

我的文件按此顺序保存:

Text.txt
Text_10.txt
Text_2.txt
...
Text_9.txt

我希望它们像 windows 一样排序:

Text.txt
Text_2.txt
...
Text_9.txt
Text_10.txt

我怎么能这样做?

4

2 回答 2

3

如果你想和windows一样对它们进行排序,可以使用这个函数进行比较:

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);

然后,您可以定义IComparer<string>将使用此函数的实现。

于 2013-07-03T23:57:56.547 回答
2

根据 Andrey Shchekin 的回答,您只需要制作这样的课程:

internal class FileNameComparer : IComparer<string>
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    public static extern int StrCmpLogicalW(string psz1, string psz2);

    public int Compare(string a, string b)
    {
        return StrCmpLogicalW(a, b);
    }
}

然后使用这个比较器:

files = Directory.GetFiles(tbDirectory.Text).OrderBy(file => file, new FileNameComparer()).ToArray();
于 2013-07-04T00:35:06.733 回答