As I know there is no built-in feature to handle access denied exceptions. You will have to do the recursion manually.
A good example can be found http://stackoverflow.com/questions/172544/ignore-folders-files-when-directory-getfiles-is-denied-access:
using System;
using System.IO;
static class Program
{
static void Main()
{
string path = "";
ApplyAllFiles(path, ProcessFile);
}
static void ProcessFile(string path) {}
static void ApplyAllFiles(string folder, Action<string> fileAction)
{
foreach (string file in Directory.GetFiles(folder))
{
fileAction(file);
}
foreach (string subDir in Directory.GetDirectories(folder))
{
try
{
ApplyAllFiles(subDir, fileAction);
}
catch
{
}
}
}
}
You will have to refine this to match your filtering.