如何根据文件名正确排序文件

时间:2013-07-03 23:53:52

标签: c# winforms

我使用这个功能:

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

我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

如果要以与Windows相同的方式对它们进行排序,可以使用此功能进行比较:

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

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

答案 1 :(得分:1)

基于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();