Операция разности двух массивов 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д