C# сортировка списка (под) каталогов с естественной сортировкой

Я пытаюсь отсортировать список каталогов и подкаталогов с помощью естественной сортировки, и сейчас это не совсем то, что я хочу.

Прямо сейчас я получаю это:

    D:/pictures/apples/a.txt
    D:/pictures/apples pink/c.txt
    D:/pictures/bananas/asdasd.txt
    D:/pictures/lemons/foo.txt
    D:/pictures/lemons yellow/bar.txt
    D:/pictures/lemons/fresh/c.txt
    D:/pictures/oranges/341/d.txt

Что я хочу это:

    D:/pictures/apples/a.txt
    D:/pictures/apples pink/c.txt
    D:/pictures/bananas/asdasd.txt
    D:/pictures/lemons/foo.txt
    D:/pictures/lemons/fresh/c.txt
    D:/pictures/lemons yellow/bar.txt
    D:/pictures/oranges/341/d.txt

Обратите внимание, подкаталог лимонов должен быть перед другим.

Для естественной сортировки я использую встроенную функцию Windows, как описано здесь, и использую следующий код для достижения вышеуказанного:

    var files = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories)
        .OrderBy(f => Path.GetDirectoryName(f), new NaturalSortComparer())
        .ThenBy(f => f.Count(c => c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar))
        .Where(file => extensions.Contains(Path.GetExtension(file.ToLower())));

0 ответов

Другие вопросы по тегам