忽略文件夹C#(System.UnauthorizedAccessException)

忽略文件夹C#(System.UnauthorizedAccessException),c#,exception,C#,Exception,一个简短的问题。我正在执行以下代码: listBox1.Items.AddRange( Directory.GetDirectories("C:\\Users\\", "*" ,SearchOption.AllDirectories)); 它列出了C:\Users\中的所有目录和子目录(是的,我知道,它可能会炸毁我的电脑) 无论如何,我得到了这个错误(System.UnauthorizedAccessException) 此错误来自特殊文件夹“C:\Users\All Users\”和“C:\

一个简短的问题。我正在执行以下代码:

listBox1.Items.AddRange( Directory.GetDirectories("C:\\Users\\", "*" ,SearchOption.AllDirectories));
它列出了C:\Users\中的所有目录和子目录(是的,我知道,它可能会炸毁我的电脑)

无论如何,我得到了这个错误(System.UnauthorizedAccessException)

此错误来自特殊文件夹“C:\Users\All Users\”和“C:\Users\USER\AppData\”


我怎样才能忽略此文件夹,以便在程序中无例外地列出所有目录和子目录?

不幸的是,如果没有所需的权限,则无法筛选出所有目录。您需要实现自己的递归函数,通过捕获
UnauthorizedAccessException
来处理该问题。由于可能存在许多例外情况,因此该方法不是很快,而是可靠的,如下所述:

[…]权限(甚至文件存在)是不稳定的-它们可以随时更改[…]

以下是我可能的解决方案:

public static void GetDirectories(string path, Action<string> foundDirectory)
{
    string[] dirs;
    try
    {
        dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
    }
    catch (UnauthorizedAccessException)
    {
        //Ignore a directory if an unauthorized access occured
        return;
    }

    foreach (string dir in dirs)
    {
        foundDirectory(dir);
        //Recursive call to get all subdirectories
        GetDirectories(dir, foundDirectory);
    }
}
publicstaticvoidgetdirectories(字符串路径,actionfounddirectory)
{
字符串[]dirs;
尝试
{
dirs=Directory.GetDirectories(路径“*”,SearchOption.TopDirectoryOnly);
}
捕获(未经授权的访问例外)
{
//如果发生未经授权的访问,请忽略目录
返回;
}
foreach(dirs中的字符串dir)
{
目录(dir);
//递归调用以获取所有子目录
GetDirectories(dir,foundDirectory);
}
}
只需像下面这样调用函数

List<string> allDirectories = new List<string>();
GetDirectories(@"C:\Users\", d => allDirectories.Add(d));
List allDirectories=new List();
GetDirectories(@“C:\Users\”,d=>allDirectories.Add(d));
使用“try-catch”结构