Операция разности двух массивов FileInfo - C#

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

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

Здравствуйте! Есть два массива FileInfo. К примеру f1 и f2. Нужно найти разность этих массивов и потом в цикле вывести имена этих файлов. Используя метод Except класса Enumerable, в результате разность не определяется. Вот такой код:
Листинг программы
  1. f = f1.Except(f2);
не работает. В результате получается исходный массив со всеми элементами. Вопрос: почему так и как сделать так, чтобы это работало? Спасибо!

Решение задачи: «Операция разности двух массивов FileInfo»

textual
Листинг программы
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         DirectoryInfo dir = new DirectoryInfo("C:\\");
  6.         var all = dir
  7.             //папки диска "С"
  8.             .GetDirectories()
  9.             //отбрасывам системные
  10.             .Where(d => (d.Attributes & FileAttributes.System) == 0)
  11.             //получаем папки второго уровня
  12.             .Aggregate(Enumerable.Empty<DirectoryInfo>(),
  13.                 (list, newDir) => list.Concat(newDir.GetDirectories()));
  14.         //папки диска "С"
  15.         var first = dir.GetDirectories()
  16.             //находим первую несистемную
  17.             .First(d => (d.Attributes & FileAttributes.System) == 0)
  18.             //получам из нее дочерние директории
  19.             .GetDirectories();
  20.         //Intersect - пересечиние множеств - то, что Вам нужно
  21.         //При пересечении множеств всех папок и первой,
  22.         //остаются только дети первой
  23.         foreach(var d in all.Intersect(first, new FileSystemInfoComparer()))
  24.             Console.WriteLine(d);
  25.         Console.ReadKey();
  26.     }
  27. }
  28. //класс для сравнения папок и файлов,
  29. //который для сравнения использует только полный путь
  30. //з.ы. неуверен, надежный ли это подход, но исправить несложно
  31. class FileSystemInfoComparer : IEqualityComparer<FileSystemInfo>
  32. {
  33.  
  34.     public bool Equals(FileSystemInfo f1, FileSystemInfo f2)
  35.     {
  36.         return f1.FullName == f2.FullName;
  37.     }
  38.  
  39.     public int GetHashCode(FileSystemInfo fsi)
  40.     {
  41.         return fsi.FullName.GetHashCode();
  42.     }
  43. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы