public List<string> walkDirectoryTree(DirectoryInfo root, string[] filters)
{
var ret = new List<string>();
foreach (var filter in filters)
{
try
{
FileInfo[] files = root.GetFiles(filter);
foreach (var file in files)
ret.Add(file.FullName);
}
catch (UnauthorizedAccessException)
{
}
}
var dirs = root.GetDirectories();
foreach(var dir in dirs)
ret.AddRange(walkDirectoryTree(dir, filters));
return ret;
}