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

时间:2017-07-22 05:40:47

标签: c# exception

一个简单的问题。我正在执行此代码:

listBox1.Items.AddRange( Directory.GetDirectories("C:\\Users\\", "*" ,SearchOption.AllDirectories));

它列出了C:\ Users \中的所有目录和子目录(是的,我知道,它可能会炸毁我的电脑)

无论如何,我收到此错误(System.UnauthorizedAccessException)

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

我怎样才能忽略这个文件夹来编程保持列出所有dir和sub而不用Exceptions?

1 个答案:

答案 0 :(得分:0)

不幸的是,如果没有所需的权限,就无法过滤掉所有目录。您需要实现自己的递归函数来捕获UnauthorizedAccessException来解决问题。由于可能存在许多例外,因此解释方式不是很快但可靠,如解释in this question

  

[...]权限(甚至文件存在)是易变的 - 它们可以随时改变[...]

这是我可能的解决方案:

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);
    }
}

只需调用类似

的功能即可
List<string> allDirectories = new List<string>();
GetDirectories(@"C:\Users\", d => allDirectories.Add(d));