¿Cómo ordenaría una lista de archivos por nombre para que coincida con la forma en que Windows Explorer los muestra?

Digamos que he ordenado una lista de archivos en el Explorador por nombre, así:

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

Tengo un Comparador de FileInfo que ordena una matriz de objetos FileInfo por nombre:

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

Ordenar la misma lista de archivos desde arriba usando este Comparer produce:

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

que es problemático, ya que el orden es extremadamente importante.

Me imagino que hay una manera de imitar lo que Windows está haciendo en el código C #, pero todavía tengo que encontrar la manera. ¡Cualquier ayuda es apreciada!

¡Gracias!

Windows Explorer usa una API llamada:

 StrCmpLogicalW 

para realizar el género de una manera “lógica”.

Alguien también ha implementado una clase en C # que hará esto por ti.

También puede usar P / Invoke para llamar a la API de win32. Este sería el comportamiento más consistente y podría tener un mejor rendimiento (haría referencia a ambas opciones). Incluso el enlace del proyecto de código no es del todo coherente con el comportamiento de Windows y no es a prueba de futuro.

Necesita un tipo numérico natural que desafortunadamente no hay una implementación nativa de .NET Framework. Este artículo sobre CodeProject le dirá todo lo que necesita saber acerca de cómo crear su propio clon de .NET.