namespace SQLLinter.Common.Helpers; public static class FileHelpers { public static List FindFilesWithMask(List paths) { return paths.SelectMany(path => { var fullPath = Path.GetFullPath(path); var directory = Path.GetDirectoryName(fullPath); if (directory == null) return Enumerable.Empty(); string pattern = Path.GetFileName(fullPath); // Если маска есть в директории if (directory.Contains("*") || directory.Contains("?")) { var root = Path.GetPathRoot(directory); if (root == null) return Enumerable.Empty(); string relative = directory.Substring(root.Length); return ExpandDirectories(root, relative) .SelectMany(dir => Directory.EnumerateFiles(dir, pattern)); } else { return Directory.Exists(directory) ? Directory.EnumerateFiles(directory, pattern) : Enumerable.Empty(); } }).ToList(); } public static IEnumerable ExpandDirectories(string root, string relative) { string[] parts = relative.Split(Path.DirectorySeparatorChar); IEnumerable dirs = new[] { root }; foreach (var part in parts) { dirs = part.Contains("*") || part.Contains("?") ? dirs.SelectMany(d => Directory.Exists(d) ? Directory.EnumerateDirectories(d, part) : Enumerable.Empty()) : dirs.Select(d => Path.Combine(d, part)); } return dirs.Where(Directory.Exists); } }