2016-01-18 2 views
2

Я загружаю список файлов, помещенных в каталог в массив строк. Я использую System.IO.Directory.GetFiles(),Как настроить сортировку возвращаемых значений Directory.GetFiles()

String[] path = Directory.GetFiles(batchElements[j].DocIdPath, "*.csv", SearchOption.AllDirectories); 

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

  • 2713_CFPB Расчетная стоимость Booklet_2713_1.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_10.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_11.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_2.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_3.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_4.csv
  • 2713_CFPB Расчетная стоимость Booklet_271 3_5.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_6.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_7.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_8.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_9.csv

Но вместо этого я хочу собирать значения в этом порядке.

  • 2713_CFPB Расчетная стоимость Booklet_2713_1.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_2.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_3.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_4.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_5.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_6.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_ 7.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_8.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_9.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_10.csv
  • 2713_CFPB Расчетная стоимость Booklet_2713_11.csv

Цените помощь.

+0

Затем я предлагаю вам выполнить сравнение, которое может это определить. Обратите внимание, что вы должны иметь возможность кодировать его и тестировать без ссылки на «Directory.GetFiles». –

+0

Возможно, вы захотите прочитать http://blog.codinghorror.com/sorting-for-humans-natural-sort-order/ –

+0

Будет ли первая часть файлов быть точно «2713_CFPB Costs Booklet_2713_»? Или мы можем считать, что номер числа всегда будет последним? – Don

ответ

4

Вы можете сделать:

  • Получить имя файла только с помощью Path.GetFileNameWithoutExtension
  • Разделить их на основе _
  • Получить последний элемент
  • Разобрать его с помощью int.Parse или int.TryParse
  • Используйте это значение в OrderBy с LINQ

Код:

var output = path.OrderBy(p => 
         int.TryParse(Path.GetFileNameWithoutExtension(p).Split('_').Last(), out temp) ? 
         temp : int.MaxValue); 

Если вам нужен массив или List<T> в качестве вывода затем добавить ToArray() или ToList() к запросу.

Смежные вопросы