忽略文件夹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”结构