Created
August 31, 2014 09:27
-
-
Save jaywick/a7a730009d57ca67b506 to your computer and use it in GitHub Desktop.
Safe EnumerateFiles extension for DirectoryInfo without UnauthorizedAccessException
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static IEnumerable<FileInfo> SafeEnumerateFiles(this DirectoryInfo target, string pattern = "*.*") | |
{ | |
var allFiles = Enumerable.Empty<FileInfo>(); | |
var stack = new Stack<DirectoryInfo>(); | |
stack.Push(target); | |
while (stack.Any()) | |
{ | |
var current = stack.Pop(); | |
var files = getFiles(current, pattern); | |
allFiles = allFiles.Concat(files); | |
foreach (var subdirectory in getSubdirectories(current)) | |
{ | |
stack.Push(subdirectory); | |
} | |
} | |
return allFiles; | |
} | |
private static IEnumerable<FileInfo> getFiles(DirectoryInfo directory, string pattern) | |
{ | |
try | |
{ | |
return directory.EnumerateFiles(pattern, SearchOption.TopDirectoryOnly); | |
} | |
catch (UnauthorizedAccessException) | |
{ | |
return Enumerable.Empty<FileInfo>(); | |
} | |
} | |
private static IEnumerable<DirectoryInfo> getSubdirectories(DirectoryInfo directory) | |
{ | |
try | |
{ | |
return directory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly); | |
} | |
catch (UnauthorizedAccessException) | |
{ | |
return Enumerable.Empty<DirectoryInfo>(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment