1

我正在尝试将目录列表添加到 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)
            {

            }

        }
    }

每次我尝试为此类问题实施其他人的解决方案时,我都没有得到任何类型的目录列表。该程序占用了太多资源,只是忽略了它无法触及的文件夹。我忽略了一些简单的事情吗?或者这种方法是不可能的?任何帮助表示赞赏,干杯。

4

1 回答 1

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

关于这个解决方案的更多信息,以及我是如何获得它的,可以在以下位置找到:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/206cfa9d-3e5b-43be-840f-49a221e10749/c-unauthorizedaccessexception-when-trying-to-programmically-copying-folder

于 2013-11-05T07:44:21.107 回答