diff --git a/Source/FileManager/FileUtility.cs b/Source/FileManager/FileUtility.cs index 484ed1a8..b2bc4274 100644 --- a/Source/FileManager/FileUtility.cs +++ b/Source/FileManager/FileUtility.cs @@ -244,27 +244,14 @@ namespace FileManager /// List of files public static IEnumerable SaferEnumerateFiles(LongPath path, string searchPattern = "*", SearchOption searchOption = SearchOption.TopDirectoryOnly) { - var foundFiles = Enumerable.Empty(); - - try - { - if (searchOption == SearchOption.AllDirectories) - { - IEnumerable subDirs = Directory.EnumerateDirectories(path).Select(p => (LongPath)p); - // Add files in subdirectories recursively to the list - foreach (string dir in subDirs) - foundFiles = foundFiles.Concat(SaferEnumerateFiles(dir, searchPattern, searchOption)); - } - - // Add files from the current directory - foundFiles = foundFiles.Concat(Directory.EnumerateFiles(path, searchPattern).Select(f => (LongPath)f)); - } - catch (UnauthorizedAccessException) { } - catch (PathTooLongException) { } - // Symbolic links will result in DirectoryNotFoundException. Ohter logical directories might also. Just skip them. Don't want to risk (or have to handle) infinite recursion - catch (DirectoryNotFoundException) { } - - return foundFiles; + var enumOptions = new EnumerationOptions + { + RecurseSubdirectories = searchOption == SearchOption.AllDirectories, + IgnoreInaccessible = true, + ReturnSpecialDirectories = false, + MatchType = MatchType.Simple + }; + return Directory.EnumerateFiles(path.Path, searchPattern, enumOptions).Select(p => (LongPath) p); } ///