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 に答える