一个简单的问题。我正在执行此代码:
listBox1.Items.AddRange( Directory.GetDirectories("C:\\Users\\", "*" ,SearchOption.AllDirectories));
它列出了C:\ Users \中的所有目录和子目录(是的,我知道,它可能会炸毁我的电脑)
无论如何,我收到此错误(System.UnauthorizedAccessException)
此错误来自特殊文件夹“C:\ Users \ All Users \”和“C:\ Users \ USER \ AppData \”
我怎样才能忽略这个文件夹来编程保持列出所有dir和sub而不用Exceptions?
答案 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));