Упорядочить файлы численно в определенной папке - PullRequest
0 голосов
/ 29 мая 2019

У меня есть папка, которая содержит только .txt файлы.Я хочу, чтобы мой вывод имел определенный порядок.

Первые 2 цифры каждого имени файла являются его уникальным идентификатором.Я хочу упорядочить файлы в числовом порядке в таком порядке

Я исследовал несколько вопросов, которые выглядят примерно так: Получение всех имен файлов из папки с использованием C #

, ноникто не помог мне достичь этой цели.Какой самый простой способ получить желаемый результат?

        string folder = @"C:\Testing\";
        var txtFiles = Directory.GetFiles(folder, "*.txt")
                                 .Select(Path.GetFileName)
                                 .ToList();
        foreach(var f in txtFiles)
        {
            Console.WriteLine(f);
        }
        Console.ReadKey();

Windows Explore

enter image description here

Консольный выход

Output file

Ответы [ 4 ]

2 голосов
/ 29 мая 2019

Заполняет первую числовую секцию нулями для целей сортировки:

string folder = @"C:\Testing";
var txtFiles = Directory.GetFiles(folder, "*.txt")
                        .Select(Path.GetFileName)
                        .OrderBy(f => f.Split('_')[0].PadLeft(5, '0'));

foreach (var f in txtFiles)
{
    Console.WriteLine(f); 
}
1 голос
/ 29 мая 2019

Более простой альтернативой может быть использование отступов:

var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
                        .Select(Path.GetFileName)
                        .OrderBy(s => s.PadLeft(11));
1 голос
/ 29 мая 2019

Вы можете просто использовать оператор OrderBy linq и разобрать имя файла, чтобы получить то, что вы хотите.Также вам не нужно ToList(), если все, что вам нужно, это простой список, такой как IEnumerable.

Например:

var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
                         .Select(Path.GetFileName)
                         .OrderBy(file =>
                         {
                             string[] nameParts = file.Split('_');
                             if (nameParts.Length > 0)
                             {
                                 int sortValue;
                                 if (int.TryParse(nameParts[0], out sortValue))
                                 {
                                     return sortValue;
                                 }
                             }
                             return 0;
                         });
0 голосов
/ 29 мая 2019

Если вы хотите, чтобы вы лучше сортировали.используя метод расширения .OrderBy.

string folder = @"C:\Testing\";
var txtFiles = Directory.GetFiles(folder, "*.txt")
               .Select(Path.GetFileName)
               .OrderBy(x => x)
               .ToList();
foreach (var f in txtFiles)
{
 Console.WriteLine(f);
}
Console.ReadKey();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...