There is a nice new method in .NET 4.0 for getting files in a directory in a streaming way via enumeration.
The problem here is that if one wishes to enumerate all files one may not know in advance which files or folders are access protected and can throw an UnauthorizedAccessException.
To reproduce, one can just run this fragment:
foreach (var file in Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories))
{
// whatever
}
Before this .NET method existed it was possible to achieve roughly the same effect by implementing a recursive iterator on the string-array returning methods. But it's not quite as lazy as the new .NET method is.
So what to do? Can the UnauthorizedAccessException be suppressed or is a fact of life when using this method?
Seems to me that the method should have an overload accepting an action to deal with any exceptions.
Ths issue with the above answer is that is does not take care of exception in sub directories. This would be a better way to handling those exceptions so you get ALL files from ALL subdirectories except those with threw an access exception: