Как правильно упорядочить файлы на основе имени файла

Я использую эту функцию:

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

и мои файлы сохранены в следующем порядке:

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

Я хочу, чтобы они были отсортированы, как окна:

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

Как я могу это сделать?

2 ответа

На основании ответа Андрея Щекина вам просто нужно сделать такой класс:

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);
 }
}
</string>

И затем использовать этот компаратор:

files = Directory.GetFiles(tbDirectory.Text).OrderBy(file => file, new FileNameComparer()).ToArray();


Если вы хотите отсортировать их так же, как Windows, вы можете использовать эту функцию для сравнения:

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

Затем вы можете определить свою реализацию IComparer которая будет использовать эту функцию.

licensed under cc by-sa 3.0 with attribution.