我使用这个功能:
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
我怎么能这样做?
答案 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();