Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用自然排序对(子)目录列表进行排序_C#_Sorting_Natural Sort - Fatal编程技术网

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

C#使用自然排序对(子)目录列表进行排序,c#,sorting,natural-sort,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/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())));