using System; using System.Collections; using System.Collections.Generic; using System.IO; class Program { static void Main(string[] args) { try { // Отримати перелік файлів для використання як упорядкованої множини IEnumerable f1 = Directory.EnumerateFiles (@"/home/chief/tmp","*", SearchOption.AllDirectories); // Створення упорядкованого набору з порівнянням ByFileExtension. var m1 = new SortedSet(new ByFileExtension()); foreach (string f in f1) m1.Add(f.Substring(f.LastIndexOf(@"\") + 1)); Console.WriteLine("Перелік елементів m1:"); foreach (string s in m1) Console.WriteLine($" {s}"); Console.WriteLine($"\n До RemoveWhere(IsDoc) |m1| = {m1.Count}"); m1.RemoveWhere(IsDoc); Console.WriteLine($"Після RemoveWhere(IsDoc) |m1| = {m1.Count}"); Console.WriteLine("\nПерелік елементів m1:"); foreach (string s in m1) Console.WriteLine($" {s}"); SortedSet avis = m1.GetViewBetween("avh", "avi"); Console.WriteLine("\nФайли m1 з розширенням avi:"); foreach (string s in avis) Console.WriteLine($" {s}"); IEnumerable f2 = Directory.EnumerateFiles (@"/home/chief/tmp","*", SearchOption.AllDirectories); var m2 = new SortedSet(new ByFileExtension()); foreach (string f in f2) m2.Add(f.Substring(f.LastIndexOf(@"\") + 1)); Console.WriteLine($"\n До m2.ExceptWith(m1) |m2| = {m2.Count}"); m2.ExceptWith(m1); Console.WriteLine($"Після m2.ExceptWith(m1) |m2| = {m2.Count}"); Console.WriteLine(); // Створення набору множин IEqualityComparer> comparer = SortedSet.CreateSetComparer(); var allMedia = new HashSet>(comparer); allMedia.Add(m1); allMedia.Add(m2); foreach (SortedSet m in allMedia) { foreach (string s in m) Console.WriteLine($" {s}"); Console.WriteLine("----------------------"); } } catch(IOException ioEx) {Console.WriteLine(ioEx.Message);} catch (UnauthorizedAccessException AuthEx) {Console.WriteLine(AuthEx.Message);} } // Означити предикат для використання // методом SortedSet.RemoveWhere private static bool IsDoc(string s) { s = s.ToLower(); return (s.EndsWith(".txt") || s.EndsWith(".xls") || s.EndsWith(".xlsx") || s.EndsWith(".pdf") || s.EndsWith(".doc") || s.EndsWith(".docx")); } } // Визначення порівнювача для створення набору, // упорядкованого за розширенням файлу. // При однакових розширеннях - за назвою public class ByFileExtension : IComparer { string xExt, yExt; CaseInsensitiveComparer caseiComp = new CaseInsensitiveComparer(); public int Compare(string x, string y) { // Виділення розширення з імені файлу xExt = x.Substring(x.LastIndexOf(".") + 1); yExt = y.Substring(y.LastIndexOf(".") + 1); // Порівняння розширень файлів int vExt = caseiComp.Compare(xExt, yExt); if (vExt != 0) return vExt; else return caseiComp.Compare(x, y); } }