我正在尝试向TreeView系统添加目录列表,但我遇到的问题似乎是用户访问问题。我已经尝试了解决这个问题的各种步骤,其中没有一个有效。其中包括:更改解决方案清单文件中的安全性,使用try catch跳过我无法访问的文件,并将我的Windows用户文件夹设置更改为完全控制(管理员)。我在整个网络中环顾四周寻找类似问题的答案,大多数人刚刚使用了try catch系统。这对我的系统不起作用,因为一切都冻结了,它就坐在那里。然后程序就像在我的整个计算机上找不到一个目录一样。我的代码包括:
public Folder_Browser()
{
InitializeComponent();
MapDirectory();
}
private void MapDirectory()
{
TreeNode rootNode;
DirectoryInfo dirPrograms = new DirectoryInfo(@"/");
DriveInfo[] loadedDrives = DriveInfo.GetDrives();
foreach (DriveInfo dr in loadedDrives)
{
if (dr.DriveType != DriveType.Removable)
{
DirectoryInfo info = new DirectoryInfo(dr.Name);
if (info.Exists)
{
rootNode = new TreeNode(info.Name);
rootNode.Tag = info;
GetDirectories(info.GetDirectories(), rootNode);
treeView1.Nodes.Add(rootNode);
}
}
}
}
private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
{
TreeNode aNode;
DirectoryInfo[] subSubDirs;
foreach (DirectoryInfo subDir in subDirs)
{
aNode = new TreeNode(subDir.Name, 0, 0);
aNode.Tag = subDir;
aNode.ImageKey = "folder";
try
{
subSubDirs = subDir.GetDirectories();
//ERROR HERE^^^^^^^
if (subSubDirs != null && subSubDirs.Length != 0)
{
GetDirectories(subSubDirs, aNode);
}
nodeToAddTo.Nodes.Add(aNode);
}
catch (System.UnauthorizedAccessException)
{
}
}
}
每当我尝试实施其他人解决此类问题的解决方案时,我就不会得到任何类型的目录列表。该程序占用太多资源而忽略了它无法触及的文件夹。我忽略了一些简单的事情吗?或者这种方法不可能吗?任何帮助表示赞赏,干杯。
答案 0 :(得分:0)
如果有人有这样的问题,我设法找到解决问题的解决方案。需要添加一个额外的函数,它控制程序如何与元素(目录)进行交互。此程序使用相同的源,跳过解决方案无法访问的目录(尝试catch),但使用System.Security.AccessControl允许它继续并找到可以访问的目录。功能如下:
使用System.Security.AccessControl;
public static void SetAccessRule(string directory)
{
System.Security.AccessControl.DirectorySecurity Security = System.IO.Directory.GetAccessControl(directory);
FileSystemAccessRule accountAllow = new FileSystemAccessRule(Environment.UserDomainName + "\\" + Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow);
Security.AddAccessRule(accountAllow);
}
有关此解决方案的更多信息以及我是如何获得的,可以在以下网址找到: