public static IEnumerable <DirectoryInfo> SafeDirectorySearch([NotNull] DirectoryInfo path, [NotNull] string searchPattern = "*.*", SearchOption searchOption = SearchOption.TopDirectoryOnly) { path = path.ArgumentExists(); searchPattern = searchPattern.ArgumentNotNullOrEmpty(); searchOption = searchOption.ArgumentDefined(); var folders = new List <DirectoryInfo> { path, }; for (var directoryCount = 0; directoryCount < path.GetDirectories(searchPattern, searchOption).Length; directoryCount++) { try { IEnumerable <DirectoryInfo> searchResult = SafeDirectorySearch(path.GetDirectories(searchPattern, searchOption)[directoryCount], searchPattern); if (searchResult.HasItems()) { _ = folders.AddRange(searchResult, Tristate.True); } } catch (Exception ex) when(ex is ArgumentException or ArgumentNullException or ArgumentOutOfRangeException or System.IO.DirectoryNotFoundException or UnauthorizedAccessException) { Trace.WriteLine(ex.Message); } } return(folders); }
public static IReadOnlyList <FileInfo> SafeFileSearch([NotNull] IEnumerable <DirectoryInfo> directories, [NotNull] string searchPattern, SearchOption searchOption = SearchOption.TopDirectoryOnly) { directories = directories.ArgumentNotNull(); searchPattern = searchPattern.ArgumentNotNullOrEmpty(); searchOption = searchOption.ArgumentDefined(); var files = new List <FileInfo>(); directories.ToList().ForEach(directory => { try { if (directory.Exists) { FileInfo[] directoryFiles = directory.EnumerateFiles(searchPattern, searchOption).ToArray(); if (directoryFiles.HasItems()) { _ = files.AddIfNotExists(directoryFiles); } } } catch (Exception ex) when(ex is System.IO.DirectoryNotFoundException or SecurityException or UnauthorizedAccessException) { Trace.WriteLine(ex.Message); } }); return(files); }
public static bool SafeDirectoryContainsAny([NotNull] DirectoryInfo path, SearchOption searchOption = SearchOption.TopDirectoryOnly, [NotNull] params string[] searchPatterns) { path = path.ArgumentExists(); searchOption = searchOption.ArgumentDefined(); searchPatterns = searchPatterns.ArgumentNotNull(); for (var patternCount = 0; patternCount < searchPatterns.Length; patternCount++) { try { IEnumerable <DirectoryInfo> searchResult = SafeDirectorySearch(path, searchPatterns[patternCount], searchOption); if (searchResult.HasItems()) { return(true); } } catch (Exception ex) when(ex is ArgumentException or ArgumentNullException or ArgumentOutOfRangeException or UnauthorizedAccessException) { Trace.WriteLine(ex.Message); } } return(false); }
public static long GetSize([NotNull] this DirectoryInfo path, string searchPattern = "*.*", SearchOption searchOption = SearchOption.TopDirectoryOnly) { path = path.ArgumentNotNull(); searchPattern = searchPattern.ArgumentNotNullOrEmpty(); searchOption = searchOption.ArgumentDefined(); return(path.GetFiles(searchPattern, searchOption).Sum(p => p.Length)); }
public static IEnumerable <Type> FindDerivedTypes(DirectoryInfo path, SearchOption fileSearchType, [NotNull] Type baseType, Tristate classOnly) { fileSearchType = fileSearchType.ArgumentDefined(); var files = path.ArgumentExists().EnumerateFiles("*.dll", fileSearchType).ToList(); baseType = baseType.ArgumentNotNull(); var list = files.ToList(); var foundTypes = new List <Type>(); for (var fileIndex = 0; fileIndex < list.FastCount(); fileIndex++) { try { var assembly = Assembly.LoadFrom(list[fileIndex].FullName); var exportedTypes = assembly.ExportedTypes.Where(p => p.BaseType is not null).ToList(); if (exportedTypes?.FastCount() > 0) { var containsBaseType = exportedTypes.Any(p => string.Equals(p.BaseType.FullName, baseType.FullName, StringComparison.Ordinal)); if (containsBaseType) { foundTypes.AddRange(LoadDerivedTypes(assembly.DefinedTypes, baseType, classOnly)); } } } catch (BadImageFormatException ex) { Trace.WriteLine(ex.GetAllMessages()); } catch (FileLoadException fileLoadEx) { Trace.WriteLine(fileLoadEx.GetAllMessages()); } } return(foundTypes); }