如何按名称对文件列表进行排序以匹配Windows资源管理器的显示方式?

假设我按名称在资源管理器中对文件列表进行了排序,如下所示:

2009-06-02-4.0.9.txt
2009-06-02-4.0.10.txt
2009-06-02-4.0.11.txt
2009-06-02-4.0.12.txt

我有一个FileInfo Comparer,它按名称对FileInfo对象数组进行排序:

class FileInfoComparer : IComparer { public int Compare(FileInfo x, FileInfo y) { return string.Compare(x.FullName, y.FullName, StringComparison.OrdinalIgnoreCase); } } 

使用此Comparer从上面对相同的文件列表进行排序产生:

2009-06-02-4.0.10.txt
2009-06-02-4.0.11.txt
2009-06-02-4.0.12.txt
2009-06-02-4.0.9.txt

这是有问题的,因为订单非常重要。

我想有一种模仿Windows在C#代码中做什么的方法,但我还没有找到办法。 任何帮助表示赞赏!

谢谢!

Windows资源管理器使用名为的API:

 StrCmpLogicalW 

以“逻辑”的方式执行排序。

有人还在C#中实现了一个类 ,它将为您完成此操作。

您还可以使用P / Invoke来调用win32 API。 这将是最一致的行为,并且可能表现更好(我会对两个选项进行基准测试)。 即使是代码项目链接也不完全符合Windows行为,并且它不是未来的证据。

您需要一个自然的数字排序,遗憾的是.NET框架中没有本机实现。 关于CodeProject的这篇文章将告诉您有关制作自己的.NET克隆的所有信息。