Checking file/folder access permission

前端 未结 3 1151
故里飘歌
故里飘歌 2020-11-27 22:15

I get an UnautorizedAccessException running this code:

string[] fileList = Directory.GetFiles(strDir, strExt);

The exception o

相关标签:
3条回答
  • 2020-11-27 22:59

    Check article on code project which is about the thing you need, the is class created for this : The purpose of this class is to provide a simple answer to a common question, "Do I have permission to Read or Write this file?".

    A simple way to test individual access rights for a given file and user

    Note: cannot post whole code over here because its too long.

    0 讨论(0)
  • 2020-11-27 22:59

    First, call Directory.GetFiles for root directory. Catch UnauthorizedAccessException - if none, you have full access.

    If caught - call the function for each subdir recursively, catch the exception, if caught - add such dir to list.

    Write a recursive function with external list for forbidden dirs

    0 讨论(0)
  • 2020-11-27 23:06

    First of all, I would manually check the permissions and see what blocks you and what doesn't. I am using something like this to check for permissions (for copy file):

    AuthorizationRuleCollection acl = fileSecurity.GetAccessRules(true, true,typeof(System.Security.Principal.SecurityIdentifier));
    bool denyEdit = false;
    for (int x = 0; x < acl.Count; x++)
    {
        FileSystemAccessRule currentRule = (FileSystemAccessRule)acl[x];
        AccessControlType accessType = currentRule.AccessControlType;
        //Copy file cannot be executed for "List Folder/Read Data" and "Read extended attributes" denied permission
        if (accessType == AccessControlType.Deny && (currentRule.FileSystemRights & FileSystemRights.ListDirectory) == FileSystemRights.ListDirectory)
        {
            //we have deny copy - we can't copy the file
            denyEdit = true;
            break;
        }
    ... more checks 
    }
    

    Also, there are some strange cases where a certain right on the folder changes the right for the files regardless of their individual permissions (will see if I can find what it is).

    0 讨论(0)
提交回复
热议问题