Сортировка списка файлов по времени, по имени - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! есть папка с файлами: Файлы - это массивы снимаемые с прибора

(потом дальше пойдут в обработку, соответственно надо как-то их отсортировать в списке, иначе при обработке не отследишь)

: 0-Х - нулевые сигналы прибора; Х - положительное измерение прибора; -Х - отрицательное измерение прибора. Вообще хочу отсортировать следующим образом: сначала файлы 0-Х, затем файлы от min(-9) значения(с ростом)---> до max значение(9). или же допустим так сформировать список файлов: сначала 0-Х, потом отрицательные (от -0.01 до -9), затем записываются положительные(0.01->9). сейчас пока получил весь список файлов, отсортированных по времени:
              
 foreach (FileInfo file in dir.GetFiles("*.txt").OrderBy(f=>f.LastWriteTime).ToList())
               {
                   files.Add(Path.GetFullPath(file.FullName));
               }
Вроде прогоняю работает нормально. Но как оказалось если массивы созданы в одну минуту, то сортировка не пашет(( например создадим в папке файл a.txt, тут же скопируем его и вставим, получив a-копия.txt. При прогоне получим, что а-копия.txt на первом месте в списке хотя создавался вторым, а а.txt - на 2 хотя создавался первым. Теперь пробую получить список по имени, но если честно не втыкаю, как запихнуть 0-Х файлы вначале, а уж потом остальные от минимального значения к максимальному.
files = files.OrderBy(s => Double.Parse(Path.GetFileNameWithoutExtension(s))).ToList();
но на значениях 0-Х.txt происходит исключение типа: Если нужны ещё какая информация скажите.

Решение задачи: «Сортировка списка файлов по времени, по имени»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
 
namespace ConsoleApplication198
{
    class Program
    {
        static void Main(string[] args)
        {
            //создаем файлы
            Directory.CreateDirectory("temp");
            File.CreateText("temp\\0-0.1.txt");
            File.CreateText("temp\\-0.1.txt");
            File.CreateText("temp\\6.2.txt");
            File.CreateText("temp\\1.txt");
            File.CreateText("temp\\-0.2.txt");
            File.CreateText("temp\\0-6.txt");
 
            //создаем список
            var list = new List<FileDesc>();
            foreach (var file in Directory.GetFiles("temp\\"))
                list.Add(new FileDesc(file));
 
            //сортируем
            list.Sort();
 
            //выводим
            foreach (var file in list)
                Console.WriteLine(file.FilePath);
 
            Console.ReadLine();
        }
    }
 
    class FileDesc : IComparable<FileDesc>
    {
        private FileType type;
        private DateTime fileDate;
        private float num;
        public string FilePath { get; private set; }
 
        public FileDesc(string fullFilePath)
        {
            FilePath = fullFilePath;
            var name = Path.GetFileNameWithoutExtension(fullFilePath);
            if (name.StartsWith("0-")) type = FileType.Zero; else
            if (name.StartsWith("-")) type = FileType.Negative; else type = FileType.Positive;
            if (type != FileType.Positive)
                name = name.Split('-')[1];
 
            num = float.Parse(name, CultureInfo.InvariantCulture);
            fileDate = File.GetCreationTime(fullFilePath);
        }
 
        public int CompareTo(FileDesc other)
        {
            var res = type.CompareTo(other.type);
            if (res == 0)
                res = num.CompareTo(other.num);
 
            return res;
        }
    }
 
    enum FileType
    {
        Zero, //0-**
        Negative, //-**
        Positive // **
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5