Сортировка списка файлов по времени, по имени - C#
Формулировка задачи:
Здравствуйте!
есть папка с файлами:
Файлы - это массивы снимаемые с прибора Вроде прогоняю работает нормально. Но как оказалось если массивы созданы в одну минуту, то сортировка не пашет((
например создадим в папке файл a.txt, тут же скопируем его и вставим, получив a-копия.txt.
При прогоне получим, что а-копия.txt на первом месте в списке хотя создавался вторым, а а.txt - на 2 хотя создавался первым.
Теперь пробую получить список по имени, но если честно не втыкаю, как запихнуть 0-Х файлы вначале, а уж потом остальные от минимального значения к максимальному.
но на значениях 0-Х.txt происходит исключение типа:
Если нужны ещё какая информация скажите.
(потом дальше пойдут в обработку, соответственно надо как-то их отсортировать в списке, иначе при обработке не отследишь)
: 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));
}files = files.OrderBy(s => Double.Parse(Path.GetFileNameWithoutExtension(s))).ToList();
Решение задачи: «Сортировка списка файлов по времени, по имени»
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 // **
}
}