C#使用自然排序对(子)目录列表进行排序

时间:2015-06-09 23:13:19

标签: c# sorting natural-sort

我正在尝试使用自然排序对目录和子目录列表进行排序,现在它并不完全是我想要的。

现在我得到了这个:

    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的内置函数here,我正在使用以下代码来实现上述目标:

    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 个答案:

没有答案