Как отсортировать список файлов по имени, чтобы они соответствовали отображению в проводнике Windows? - PullRequest
3 голосов
/ 18 июня 2009

Допустим, я отсортировал список файлов в Проводнике по имени, например:

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

У меня есть FileInfo Comparer, который сортирует массив объектов FileInfo по имени:

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

Сортировка того же списка файлов сверху с помощью этого Comparer дает:

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

, что проблематично, так как порядок чрезвычайно важен.

Я бы предположил, что есть способ имитировать то, что делает Windows в коде C #, но я еще не нашел способ. Любая помощь приветствуется!

Спасибо!

Ответы [ 3 ]

11 голосов
/ 18 июня 2009

Проводник Windows использует API под названием:

StrCmpLogicalW

чтобы выполнить сортировку "логическим" способом.

Кто-то также реализовал класс в C # , который сделает это за вас.

3 голосов
/ 18 июня 2009

Вы также можете использовать P / Invoke для вызова Win32 API. Это было бы наиболее последовательным поведением и могло бы работать лучше (я бы оценил оба варианта). Даже ссылка на проект кода не полностью соответствует поведению Windows и не является надежной.

2 голосов
/ 18 июня 2009

Вам нужна естественная числовая сортировка, которой, к сожалению, нет в нативной реализации .NET Framework. Эта статья о CodeProject расскажет вам все, что вам нужно знать о создании собственного клона .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...