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

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

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

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

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

textual
Листинг программы
class Program
{
    static void Main(string[] args)
    {
        DirectoryInfo dir = new DirectoryInfo("C:\\");
        var all = dir
            //папки диска "С"
            .GetDirectories()
            //отбрасывам системные
            .Where(d => (d.Attributes & FileAttributes.System) == 0)
            //получаем папки второго уровня
            .Aggregate(Enumerable.Empty<DirectoryInfo>(),
                (list, newDir) => list.Concat(newDir.GetDirectories()));
        //папки диска "С"
        var first = dir.GetDirectories()
            //находим первую несистемную
            .First(d => (d.Attributes & FileAttributes.System) == 0)
            //получам из нее дочерние директории
            .GetDirectories();
        //Intersect - пересечиние множеств - то, что Вам нужно
        //При пересечении множеств всех папок и первой, 
        //остаются только дети первой
        foreach(var d in all.Intersect(first, new FileSystemInfoComparer()))
            Console.WriteLine(d);
        Console.ReadKey();
    }
}
//класс для сравнения папок и файлов, 
//который для сравнения использует только полный путь
//з.ы. неуверен, надежный ли это подход, но исправить несложно
class FileSystemInfoComparer : IEqualityComparer<FileSystemInfo>
{
 
    public bool Equals(FileSystemInfo f1, FileSystemInfo f2)
    {
        return f1.FullName == f2.FullName;
    }
 
    public int GetHashCode(FileSystemInfo fsi)
    {
        return fsi.FullName.GetHashCode();
    }
}

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


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

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

5   голосов , оценка 3.6 из 5
Похожие ответы