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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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);
        }