2012-04-24 2 views
0

Я создаю кучу файлов с именем последовательно, от 0 до, скажем, 30, используя класс StreamWriter. Когда я пытаюсь прочитать их обратно в цикле, и когда я сравниваю два файла, 0 сравнивается с 10, а затем с 11 и так далее до 19, а затем 0 сравнивается с 2, затем 21 и так далее. Есть ли способ, которым я могу заставить его сравнивать 0 с 1, затем с 2 и так далее? Я читаю файлы с Directory.GetFiles();Файлы не указаны в заказе

Спасибо!

+4

Почему бы не создавать файлы, так что имена xxx00, xxx01, xxx02, ... xxx09, xxx10, xxx11, ..., xxx30? Вы должны выполнить это с помощью чего-то типа 'String.Format (« xxx {0:00} », n)' где 'n' - ваш номер файла, а' xxx' - префикс. Я мог бы сделать синтаксическую ошибку, так как я нахожусь на своем mac и не могу проверить это, очевидно: P –

+0

Хорошо, я попробую! :) –

+0

Спасибо @WordsLikeJared, ваше решение сработало! –

ответ

3

Directory.GetFiles(); просто возвращает массив строк, так что это будет довольно легко изменить их порядок

например

 var files = Directory.GetFiles(); 
     var orderedFiles = files.OrderBy(s=>int.Parse(s)); 

     foreach (string s in orderedFiles) 
     { 
      Console.WriteLine(s); 
     } 

Примечание: Вы, возможно, потребуется использовать Path.GetFileNameWithoutExtension перед вызовом int.Parse, и вы также можете использовать int.TryParse вместо этого.

+0

's' может быть' 1.ext', так что вы можете разобрать его на int? Это работает? – Kaf

+0

@Kaf, если вы можете гарантировать, что имена находятся в формате # .ext, тогда вы можете сделать 'int.Parse (s.split (". ") [0])' –

+0

@matt, который работает, но Path.GetFileNameWithoutExtension может просто сделать life eaiser –

2

См. MSDN page on Directory.GetFiles(). В частности, обратите внимание на это:

Порядок имен возвращаемых файлов не гарантируется; используйте метод Sort(), если требуется определенный порядок сортировки.

Вы должны получить имена файлов и отсортировать их самостоятельно.

Обычно файлы возвращаются в порядке имен, но в этом случае порядок будет 0,1,11,12, ..., 2,20,21, ... 3 и т. Д. Вы можете увидеть это, если вы сортируете по имени в проводнике Windows. Как уже сказал кто-то, ваш лучший выбор - проложить старшие нули. То есть 00, 01, 02, 03, ..., 10, 11, 12 и т.д.

2

Это поможет вам. Заказанный время создания

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("YourDirectoryPath"); 
System.IO.FileInfo[] files = di.GetFiles(); 

var sortedFiles = from f in files 
          orderby f.CreationTime ascending 
          select f; 
+1

+1, но с использованием DirectoryInfo обманывает;) Серьезно, хотя использование массива FileInfo - хорошая альтернатива использованию массива строк, поскольку он дает вам еще много опций –

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