Bug fix #394 : Scanning dir.s containing symlinks causes errors. Thanks @CharlieRussel

This commit is contained in:
Robert McRackan 2022-11-14 16:22:29 -05:00
parent bce44b6f6d
commit fb612ea6ab

View File

@ -212,25 +212,23 @@ namespace FileManager
{ {
var foundFiles = Enumerable.Empty<LongPath>(); var foundFiles = Enumerable.Empty<LongPath>();
if (searchOption == SearchOption.AllDirectories)
{
try try
{ {
IEnumerable <LongPath> subDirs = Directory.EnumerateDirectories(path).Select(p => (LongPath)p); if (searchOption == SearchOption.AllDirectories)
{
IEnumerable<LongPath> subDirs = Directory.EnumerateDirectories(path).Select(p => (LongPath)p);
// Add files in subdirectories recursively to the list // Add files in subdirectories recursively to the list
foreach (string dir in subDirs) foreach (string dir in subDirs)
foundFiles = foundFiles.Concat(SaferEnumerateFiles(dir, searchPattern, searchOption)); foundFiles = foundFiles.Concat(SaferEnumerateFiles(dir, searchPattern, searchOption));
} }
catch (UnauthorizedAccessException) { }
catch (PathTooLongException) { }
}
try
{
// Add files from the current directory // Add files from the current directory
foundFiles = foundFiles.Concat(Directory.EnumerateFiles(path, searchPattern).Select(f => (LongPath)f)); foundFiles = foundFiles.Concat(Directory.EnumerateFiles(path, searchPattern).Select(f => (LongPath)f));
} }
catch (UnauthorizedAccessException) { } 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; return foundFiles;
} }